Quand on fonctionne avec plusieurs serveurs sous Linux, on doit souvent gérer de nombreux mots de passe. Ils peuvent être différents, plus ou moins compliqués et ainsi de suite. Il peut vite être assez lassant de devoir tous les retenir, les noter (ouh pas bien), les gérer. Bien sûr certains pourront me parler des bases Keepass (j’essayerais de faire un petit article là dessus à l’occasion) et consorts, mais ce sera l’objet d’un prochain article. Une des solution les plus intéressantes, et les plus utilisées, est l’utilisation de clefs DSA ou RSA pour gérer l’identification. Leur avantage c’est qu’elles sont compatibles avec des scripts pour la gestion de sauvegardes distantes par exemple. La solution est donc de générer une clef dsa ou rsa qui contiendra notre identification.
Nous allons donc commencer par générer deux clefs, une publique et une privée. Nous conserverons la privée sur notre machine et communiquerons la publique au serveur auquel nous souhaitons nous connecter facilement. Les seuls prérequis sont d’avoir openssh-client sur sa machine de travail, et OpenSSH-Server sur la machine distante. Dans une console entrez la commande suivante :
ssh-keygen -t dsa -b 1024
(il suffira de remplacer dsa par rsa pour générer une clef rsa 😉 ). Suite à l’exécution de cette commande, diverses questions pourront vous être posées :
Generating public/private dsa key pair.
Enter file in which to save the key (/home/{USER}/.ssh/id_dsa): /home/{USER}/.ssh/id_dsa_pnom
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/{USER}/.ssh/id_dsa.
Your public key has been saved in /home/{USER}/.ssh/id_dsa.pub.
The key fingerprint is:
b9:ad:c3:0e:c6:1a:rt:4c:fa:17:9b:d4:28:bd:fb:ac user@machine
C’est lors de ces questions que vous pouvez définir un mot de passe pour protéger cette clef (très utile si vous souhaitez la déplacer, ou si votre machine est très facilement accessible) ou la laisser en accès simplifié (pour éviter d’entrer un mot de passe 😉 ). Il vous est possible d’en générer plusieurs en changeant le nom des fichiers de sauvegarde. Il suffira juste d’utiliser une option supplémentaire afin de préciser la clef lorsque vous essayerez de vous connecter. pour le mot de passe ou la passphrase, vous n’êtes pas limité à un mot, vous pouvez donc utiliser une phrase complète 🙂 Il faut ensuite copier notre clef dsa ou rsa sur la machine où nous souhaitons nous connecter. Cela peut se faire facilement avec la commande suivante :
ssh-copy-id -i ~/.ssh/id_dsa.pub user@machine
Bien sûr « user » sera remplacé par l’utilisateur distant que nous utilisons pour nous connecter à notre machine distante, et « machine » sera remplacé par l’ip ou le nom de la machine (si il y avait une résolution de nom).
Un autre moyen est de copie/coller soit même la clef dans le fichier ~/.ssh/authorized_keys En effet voici à quoi ressemble le contenu de votre clef :
ssh-dss AAAAB3NzaC1kc3MAAACBALuM43HGkLUiYEeevrzyehbZ5zMWIhui/re9Pr5S8id+ijz/HzeFrisRgbaAC1pgiXERxM2BoFZ+MrdM6RXUmA5V4Z2gECoymrGXpKWpm2igVqMQc/49G6iaMW7WAm7eXw9tY3hlKoSmaFCbfjvh9lzOZgamJTRi1aAv8+JanjkJAAAAFQDrB+yL7kXMkseKdAA7q4wKMhsd9QAAAIBUh414fD2K34fH8DgmJvRHH9rrB4OyW8vCXDibfsppygaVuvCuBofNlkznUb0ipnPS4Q/B8PMgidKXBCpYKQfdZE0lx4MYpknB4Gncj42NwHGY9VRbM23HFgStaS6mJZybDxskv+AwUbDIfCwPgbj7dpa+LXsc2pwmPsaQqf5wSAAAAIB1Hpmpui+23o/jEiREAEe1QBvDguvdIznAUUdf4VCbIrOwc5xw+ZdF44KubuTnVZnY98SyeKdklWXmMZwVAD9gLaNFg/Pcf3RLWLyeJ6DCuy1D0MOjq+7C1zEkVJSJxxS9E1L34xEBq4culW2C5B88IfWopBDe+5y34Nc5RmM2ZA== user@machine
Pour la copier sur le serveur, copiez/collez le fichier .pub qui est votre clef publique sur la machine avec la commande scp, puis copier la clef dans le fichier nommé ci-dessus. Pensez à mettre « >> » afin de mettre votre clef à la suite des autres déjà présentes et de ne pas écraser votre fichier :
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
Si maintenant vous vous connectez avec « ssh user@machine », il ne vous sera demandé que la passphrase, voire rien, afin de vous connecter. Dans le cas où vous auriez changé le nom des fichiers de clefs, je vous invite à utiliser cette commande pour lancer la connexion :
ssh -i ~/.ssh/id_dsa user@machine
Une dernière astuce si vous n’aviez pas conservé le nom par défaut de la clef (ce qui a mon sens n’est pas forcément utile si on utilise qu’une seule clef pour toutes les connexions) et que vous ne souhaitez pas préciser l’option -i en permanence, c’est de modifier le fichier ~/.bash_profile et d’ajouter ceci en fin de fichier :
keychain ~/.ssh/id_dsa_nomfichier
Rechargez le fichier avec la commande suivante :
source ~/.bash_profile
Et voila vous pourrez vous connecter sans préciser l’option -i. En espérant que cette astuce pourra vous être utile. Une autre solution pour lier la clef à la session X peut-être envisagée en utilisant ssh-agent mais je crois que cela sera pour un prochain article de ma part 🙂