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 !!