
Convertir ses clés SSH de PuTTY pour Linux

Dans mon processus de migration sous Linux, je me suis posé la question de la réutilisation de mes clés SSH, créées avec PuTTY, avec le client OpenSSH intégré dans la plupart des distributions. Alors une fois n’est pas coutume, un peu de vraies geekeries avec un petit tutoriel de conversion des clés, et démonstration de leur utilisation.
Quand vous utilisez PuTTY sous Windows, les fichiers de clés privées utilisées sont au format ppk (qui doit vouloir dire PuTTY Private Key), qui n’est utilisable que par lui (enfin, pas que). Fort heureusement, il n’y a pas besoin de recréer un jeu de clé quand vous changez d’environnement et surtout de logiciel. Pour ce faire, c’est le petit utilitaire PuTTYgen qui va nous servir.
PuTTYgen, générateur et convertisseur de clés depuis 1999
Ce petit programme devrait déjà être installé, puisqu’il devrait vous avoir servi pour créer votre accès. Si on vous a juste fourni la clé et que PuTTYgen n’est pas présent sur votre machine, vous pouvez le récupérer sur le site du développeur du programme.
Il faut cliquer sur le bouton « Load » entouré sur la capture ci-dessus, et sélectionner votre fichier .ppk préféré. Le résultat devrait ressembler à ça :
Ensuite, il faut cliquer sur « Conversions » dans le menu, et sur « Export OpenSSH key », puis choisir un nom de fichier, n’importe lequel. Il faudra ensuite le poser dans un dossier utilisable sous Linux.
UPDATE : Sur le blog Sam et Max, Sam nous apprend que PuTTY existe aussi sous Linux. Deux possibilités : soit vous l’utilisez, mais c’est pas super intégré à votre environnement de bureau, soit vous utilisez leur méthode pour installer puttygen et convertir la clé si vous n’avez pas de Windows sous la main. La méthode est donnée pour Ubuntu, mais sous Manjaro/Arch, il est inclus dans le paquet putty. Un simple pacman -S putty suffira à l’installer. Les commandes seront ensuite les mêmes.
Le client OpenSSH, la vraie geekerie commence
Bien, nous voilà sous Linux, notre fichier se trouve dans notre dossier utilisateur (techniquement vous pouvez le ranger où vous voulez), et nous cherchons à accéder à notre machine distante.
1 2 3 4 5 6 |
ls -l total 12 drwxr-xr-x 2 root root 4096 1 déc. 10:27 fbx -rw-r--r-- 1 root root 1922 2 janv. 09:47 linksys.py -rw------- 1 root root 883 7 avril 2013 seboss666.ssh root@Seboss666FS:~# |
Remarquez bien les droits d’accès sur le fichier (seboss666.ssh ici). Le fichier ne doit pouvoir être lisible que par son propriétaire, sinon ssh refusera de l’utiliser, car trop sensible. Pour ça, un simple chmod 0600 seboss666.ssh suffit. Sinon, pour accéder à votre machine, une seule ligne de commande suffit, et vous vous retrouvez sur votre serveur distant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
ssh seb@distant.server -i /root/seboss666.ssh The authenticity of host 'distant.server (1.2.3.4)' can't be established. RSA key fingerprint is e5:2c:f5:fe:18:bb:b0:2c:56:ee:16:51:ca:3f:b6:a5. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'distant.server' (RSA) to the list of known hosts. Linux heberg 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Jan 3 16:25:00 2014 from 5.6.7.8 seb@heberg:~$ |
Le prompt (seb@heberg ici) doit vous renseigner du succès de la connexion.
Options supplémentaires et automatisation
C’est la version la plus simple. Je vais vous présenter une version un peu plus complète, qui permet plusieurs choses :
1 |
ssh seb@distant.server -i /root/seboss666.sh -p 22 -D 9999 |
Décortiquons cette commande relativement simple (si, si, vous allez voir) :
- ssh est évidemment le nom du programme
- seb@distant.server désigne l’utilisateur et l’adresse du serveur
- -i /root/seboss666.sh permet de sélectionner l’identité, la clé privée donc
- -p 22 désigne le port sur lequel se connecter; souvent, par « sécurité », le port par défaut du serveur SSH est changé pour éviter des attaques simples dessus, il faut donc le spécifier à la commande
- -D 9999 permet de créer un tunnel et assigne un port local par lequel vous pouvez faire passer des applications par ce tunnel; pratique pour passer un proxy dans une entreprise où les VPN sont proscrits
C’est bien, c’est mieux, mais ça fait toujours très long à taper tous ces caractères. Deux solutions s’offrent à vous : créer un script shell dans /usr/bin, ou bien créer un alias plus court dans le fichier ~/.bashrc, qui charge les paramètres lors de la connexion. Je préfère cette solution, qui ne nécessite pas l’accès à root sur la machine pour créer le script.
On va la jouer court, comme d’habitude, et une seule commande va nous servir à ajouter l’alias au fichier :
1 |
echo "alias hbconnect='ssh seb@distant.server -i /root/seboss666.ssh -p 22 -D 9999'" >>~/.bashrc |
Le double chevron servira à ajouter l’alias à la fin du fichier, et si celui-ci n’existe pas, il le créera (peu probable, mais sait-on jamais).
Conclusion
J’aurais tant à dire sur les possibilités qu’offre OpenSSH ou les possibilités de personnalisation du shell sous Linux, il en faudrait un bouquin. Les réglages sont nombreux, aussi bien pour le client que pour le serveur. Pour ce dernier, on pourra lire par exemple ces bonnes pratiques pour une sécurisation.
Petit tip si putty-tools est installé, on peut passer en commande directement: puttygen /XXX/Key.ppk -O private-openssh -o id_dsa 🙂