Notes et astuces sur les systèmes libres basés sur GNU/Linux

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - ssh

Fil des billets

vendredi, 20 décembre 2013

Faire du sso avec ssh sous Archlinux, slim et zsh

Pam-Anderson1.jpgUn billet un peu technique mais qui me semble super utile dans notre gestion des clés ssh au quotidien.

La petite histoire

Avec mon serveur dédié à administrer, je me suis replongé sur cette histoire de clé ssh.
J'en avais déja parlé dans mon article sur la migration de clé ssh entre windows et Archlinux mais la manipulation que j'avais proposé me paraissait bancale.
Je souhaitais trouver quelque chose de plus propre et de plus intégré.
J'ai essayé de me tourner vers seahorse mais cette tentative fut vite interrompue car le logiciel plantait et ne gérait pas mes accès ssh depuis un terminal.
Si quelqu'un dans la salle l'utilise, je suis preneur d'une explication censée.

Sur le papier : SSO et pam_ssh

Ayant lu un billet sur pam_ssh, je souhaitais mettre cette solution en place.
Sur le principe, cette méthode est ce qui se fait de mieux en terme de sécurité/simplicité d'utilisation.

  • On se loggue via son gestionnaire de session avec son login
  • On peut soit rentrer son mot de passe unix soit sa passphrase de sa clé située dans votre .ssh
  • Si la passphrase est valide, le gestionnaire de session lance ssh-agent et ajoute de lui-même la bonne clé dans votre trousseau.
  • Ainsi, vous beneficiez d'un ssh-agent tout configuré au plus haut niveau de votre session (en terme de processus).

En pratique : Archlinux, slim, pam_ssh, zsh

Pour arriver à vos fins, il vous faudra installer la librairie PAM SSH, elle n'est malheureusement disponible que dans AUR.

yaourt -Sy aur/pam_ssh

Ensuite, il vous suffit de modifier votre configuration de pam :

vim /etc/pam.d/login
#%PAM-1.0

auth       required     pam_securetty.so
auth       requisite    pam_nologin.so
+auth       sufficient   pam_ssh.so
auth       include      system-local-login
account    include      system-local-login
session    include      system-local-login
+session    optional     pam_ssh.so

Cette modification vous permettra de faire fonctionner votre pam_ssh avec gdm, kdm et sur un tty mais pas sur XDM ou Slim.
Pour avoir cette merveilleuse fonctionnalité, il vous faudra modifier également le fichier /etc/pam.d/slim

vim /etc/pam.d/slim
#%PAM-1.0
+auth       sufficient   pam_ssh.so
auth        include     system-local-login
account     include     system-local-login
session     include     system-local-login
+session    optional     pam_ssh.so

Note à moi-même : Pour utiliser .zprofile et .zlogin quand on utilise zsh

Cela n'a rien avoir avec la choucroute mais pour bénéficier des scripts .zlogin ou .zprofile, il faut définir dans slim zsh comme un login shell.

vim /etc/slim.com
...
login_cmd           exec /usr/bin/zsh --login ~/.xinitrc %session
...

Maintenant, vous n'avez plus qu'à vous deconnecter ou essayer sur un tty avec votre login et votre passphrase.
Pour vérifier que tout fonctionne, je vous propose les commandes suivantes :

#Normalement le ps devrait vous retourner un process de ce style
ps faux | grep ssh
ssh-agent -s

#Lister les clés en mémoires
ssh-add -l
1024 65:22:54:00:4a:5f.... /home/toto/.ssh/id_dsa (DSA)

Nota Bene :

  • J'ai observé que le mécanisme mis en place ne fonctionnait pas tout le temps et vous ?
  • Je viens d'y penser, si vous le souhaitez vous pouvez également ne pas utiliser de passphrase dans votre clé ssh ! Cela vous permettra de ne plus être importuné par le ssh à chaque connexion :D

Sources :

Ps :

Paméla est là pour représenter PAM, logique non ?

samedi, 5 mai 2012

Migrer ses clés SSH de putty vers ArchLinux et SSH Agent

OpenSSH

Aujourd'hui, je souhaiterais vous faire part de ma migration SSH de Windows/Putty vers une solution basée sur ArchLinux et SSH-Agent.

Comme beaucoup d'entre-vous, j'avais mon poste de travail sous Windows et j'utilisais intensivement Putty afin de gérer mes serveurs. Depuis peu, j'ai eu la chance de pouvoir migrer mon poste de travail sous ArchLinux. Il était important de pouvoir utiliser rapidement mon GNU/Linux pour me connecter à mes serveurs.

Exporter son trousseau de clé SSH depuis Putty :

La première étape consiste à démarrer l'utilitaire Putty Key Generator. Il est installé avec Putty si vous avez choisi une installation complète.

Boite de dialogue Putty Key Generator
Chargez votre clé privée dans cet utilitaire en utilisant le bouton Load.

Dans chaque fichier clé ppk est contenu votre trousseau clé public/privé, cela va nous permettre de sauvegarder notre clé publique en faisant un copié/collé de la boite nommée Public Key for pasting into Open SSH authorized keys. Creez un nouveau fichier à l'aide de votre éditeur favoris puis sauvegardez le sous id_rsa.pub ou id_dsa.pub selon le chiffrement de votre clé.

Pour exporter votre clé privée dans un format compatible avec votre client OpenSSH, cliquez sur le menu Conversions, puis sur Export OpenSSh key, une boite de dialogue vous propose de sauvegarder votre fichier, enregistrez le sous le nom id_rsa ou id_dsa.

Déployer sa clé SSH sur ArchLinux :

Commencez par installer le paquet openssh sur votre distribution :

yaourt -Sy openssh

Une fois ceci fait, placez votre clé privée et votre clé publique venant de Putty dans le répertoire ~/.ssh de votre utilisateur.

Exporter votre clé publique sur votre serveur :

cat .ssh/id_dsa.pub | ssh mlx@M1.foo.org \
                  "cat - >>.ssh/authorized_keys"

Verifiez également sur votre serveur que la configuration du service SSH (/etc/ssh/sshd_config) comporte les lignes suivantes :

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile	%h/.ssh/authorized_keys

Si besoin, rechargez la configuration du service SSH si vous l'avez modifiée :

/etc/rc.d/ssh reload

Normalement à votre connexion à votre serveur, vous devriez obtenir l'invite suivante :

Enter passphrase for key '/home/thomas/.ssh/id_rsa':

L'authentification de votre serveur est sécurisée mais vous devrez entrer la passphrase à chaque connexion. Sachant que normalement celle ci doit être plus compliquée que votre mot de passe, ce n'est pas le pied !!

L'agent-ssh, le gardien de vos clés :

Pour résoudre le problème précédent, nous allons utilisez un outil fourni avec le client ssh, j'ai nommé l'agent-ssh. Cet utilitaire va vous permettre de gérer plusieurs trousseaux de clés et surtout de vous éviter de retaper votre pass phrase à chaque connexion à votre serveur.

On commence par exécuter l'agent :

ssh-agent
> SSH_AUTH_SOCK=/tmp/ssh-test/agent.134; export SSH_AUTH_SOCK;
> SSH_AGENT_PID=135; export SSH_AGENT_PID;
> echo Agent pid 135;

Il suffit maintenant de faire un copié/collé des deux premières lignes pour exporter les variables requises pour le bon fonctionnement de l'agent-ssh.

SSH_AUTH_SOCK=/tmp/ssh-test/agent.134; export SSH_AUTH_SOCK;
SSH_AGENT_PID=135; export SSH_AGENT_PID;

Puis il faut dire à votre agent de s'occuper de votre trousseau de clé :

ssh-add
> Enter passphrase for /home/thomas/.ssh/id_rsa: 
> Identity added: /home/thomas/.ssh/id_rsa (/home/thomas/.ssh/id_rsa)

On peut maintenant vérifier que votre clé est bien gerer ssh-agent en tapant la commande suivante :

ssh-add -l
> fingerprint_de_votre_clé /home/thomas/.ssh/id_rsa (RSA)

Une fois ces commandes effectuées, vous n'aurez plus besoin de taper votre mot de passe, ni votre pass phrase dans un certain nombre de cas.

  • L'agent-ssh étant lancé depuis une fenêtre d'un terminal, il n'est pas accessible depuis un autre terminal
  • Vous êtes obligé de taper votre pass phrase au moins une fois par session

Manipulation autour de ssh-agent :

Afin d'accéder depuis l'ensemble de vos applications à votre ssh-agent, je vous conseille de l’exécuter automatiquement à l'initialisation de votre session. Pour ce faire placez le script suivant dans votre $HOME/.profile ou $HOME/.login selon votre préférence :

ssh-agent > /tmp/ssh.keys    # pour y mettre les variables environnement
.  /tmp/ssh.keys                # Exporter les variables
rm  /tmp/ssh.keys               # Faire le ménage après

Enfin, si vous ne souhaitez pas taper votre de passe du tout, j'ai fait ce bidouillage (à vos risques et périls!)

Modifiez votre fichier .profile afin d'obtenir :

cat .profile
> export SSH_ASKPASS="/home/thomas/.ssh/add-passphrase.sh"
> ssh-agent > /tmp/ssh.keys    # pour y mettre les variables environnement
> .  /tmp/ssh.keys                # Exporter les variables
> rm  /tmp/ssh.keys               # Faire le ménage après
> ssh-add .ssh/id_rsa < /dev/null

Creez le fichier add-pasphrase.sh :

cat .ssh/add-passphrase.sh 
> #!/bin/sh
> cat /home/thomas/.ssh/key-passphrase

Puis créez le fichier key-passphrase en y insérant uniquement votre passphrase.

Mettez les autorisations qui vont bien aux deux derniers fichiers :

-rwx-- 1 thomas users add-passphrase.sh
-rw--- 1 thomas users key-passphrase

Normalement une fois ceci fait à la prochaine ouverture de session, plus aucun mot de passe ne doit vous être demandé. En effet, le seul moment où vous deviez taper votre passphrase (ssh-add), nous lui avons retourné le fichier /dev/null, ainsi il va consulter la variable SSH_ASKPASS qui contient un script lui retournant le mot de passe.

Bon c'est un peu alambiqué mais cela me semble un peu sécurisé et puis surtout bien pratique.

That's all folks !!