Authentification SSH automatique par clé

Portrait de paul

Il peut vite devenir très fatiguant de taper son mot de passe à chaque connexion à distance en SSH, surtout lorsque, pour une raison ou une autre, on désire se connecter sur l'ensemble des ordinateurs des salles info au même moment.
Heureusement, le mot de passe n'est pas le seul moyen d'authentification possible lorsqu'on utilise SSH, qui peut également utiliser l'authentification par clé. Celle-ci a l'avantage d'être bien plus difficile à brute-forcer qu'un simple mot de passe en plus d'éviter d'avoir à le rentrer à chaque fois.
Le principe est simple, il s'agit de générer une paire clé publique/clé privée, la clé publique étant ajoutée à la liste des clés autorisées sur les ordinateurs sur lesquels on désire se connecter. La clé privée doit être conservée avec précaution, car c'est elle qui est utilisée par SSH pour vérifier l'authenticité de la connexion.
Maintenant que le principe est en place, procédons.
Générons la paire clé publique/clé privée à l'aide la commande ssh-keygen :

[toto@gen2 ~]$ ssh-keygen
Generating public/private rsa key pair.
 
Enter file in which to save the key (/home/toto/.ssh/id_rsa): Created directory '/home/toto/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/toto/.ssh/id_rsa.
Your public key has been saved in /home/toto/.ssh/id_rsa.pub.
The key fingerprint is:
b8:e4:ca:37:b9:ef:0d:84:35:17:2d:7c:05:72:66:59 toto@gen2

Il faut ensuite ajouter la clé publique aux clés autorisées sur le serveur distant.

ssh-copy-id user@host

Si la commande ssh-copy-id n'existe pas, il est possible d'utiliser la commande suivante :

cat ~/.ssh/id_rsa.pub | ssh user@host "cat - >> ~/.ssh/authorized_keys"

Et voilà !

Commentaires

Portrait de romain

En cas de probleme, vérifier que ~/.ssh/authorized_keys n'a que les droits de lecture et d'écriture pour l'utilisateur (chmod 600 ~/.ssh/authorized_keys). Si ce n'est pas le cas sshd empeche la connexion par clé (le fichier ayant pu etre modifié par une personne mal intentionnée !)