Connexion SSH sans mot de passe – authentification par clés

Cette page a pour but de donner la marche à suivre pour permettre à un utilisateur 1 sur une machine 1 (client) de se connecter en tant qu’utilisateur 2 sur la machine 2 (le serveur) par ssh et sans taper de mot de passe. Ceci est très pratique, en particulier pour faire des copies cryptées avec la commande scp, avec une bonne garantie de sécurité et de manière automatisée (dans un script bash par exemple, voir le script de sauvegarde).
Nous parlerons dans la suite d’une machine cliente qui se connecte par SSH à une machine serveur. La version du protocole utilisée est SSH V2 et le serveur fait tourner OpenSSH-server. Nous supposons qu’il est configuré pour accepter l’authentification par clés.

Dans le /etc/ssh/sshd_config, sur la machine serveur, on doit trouver les directives :
RSAAuthentication yes
PubkeyAuthentication yes

L’authentification ssh sans mot de passe repose sur une authentification par clés publique/privée.
Nous allons donc commencer par générer une paire de clés publique/privée sur la machine cliente, pour l’utilisateur client. L’algorithme de cryptage utilisé pour le protocole SSH V2 est RSA.

utilisateur1@client$ ssh-keygen -t rsa

La commande ssh-keygen va générer les deux clés. ces deux clés seront stockées dans le répertoire ~/.ssh par défaut et porteront les noms id_rsa pour la clé privée et id_rsa.pub pour la clé publique.
Le script vous demandera également de saisir une pass-phrase. C’est un gage de sécurité supplémentaire. En effet, il vous faudra saisir la pass-phrase avant de pouvoir utiliser l’authentification par clés. Attention cependant, si vous souhaitez utiliser cette méthode d’authentification dans vos scripts, et que ces scripts sont lancés automatiquement sur la machine cliente indépendament des sessions utilisateurs, cela peut poser problème. Par ailleurs, si la pass-phrase doit apparaître en clair dans le script, le gain de sécurité n’est plus aussi important.
Nous considèrerons dans la suite qu’aucune pass-phrase n’a été saisie.
Il faut maintenant exporter la clé publique sur le serveur, dans le fichier ~/.ssh/authorized_keys de l’utilisateur2 utilisé sur le serveur. On peut copier manuellement le contenu de id_rsa.pub à la suite de ce fichier sur le serveur, mais nous pouvons utiliser l’utilitaire ssh-copy-id comme suit :

utilisateur1@client$ ssh-copy-id -i ~/.ssh/id_rsa.pub utilisateur2@serveur
Password:
->vous saisissez le mot de passe de l'utilisateur2 sur le serveur (il doit pouvoir se connecter par SSH sur le serveur, cela va sans dire)
->vous pouvez ensuite vous connecter sans taper de mot de passe
utilisateur1@client$ ssh utilisateur2@serveur
Last login: ..........
utilisateur2@serveur$

A noter que suivant les distributions, il peut être utile de faire un deuxième fichier sur le serveur appelé authorized_keys2, qui doit servir en priorité pour l’utilisation du protocole SSH V2… Sous Debian, l’omission de ce deuxième fichier ne semble pas poser de problème.
Il faudra également vérifier que les droits sur le fichier authorized_keys est de 600 (seul le propriétaire peut lire et modifier le fichier).

SSH agent

L’agent ssh permet de gérer les clés, les utilisateurs et les machines. Si vous utilisez une pass-phrase, vous devrez regarder du côté de ssh-askpass qui permet de demander la pass-phrase et de l’envoyer à ssh-agent, qui gèrera ensuite les connexions sans mot de passe.
Voir également ssh-add.

Laisser un commentaire