Lorsque vous voulez vous connecter en SSH sur une machine distante, celle ci vous demandera un mot de passe (ce qui est normal) mais cela peut être un problème si la connexion n’est pas établie par vous-même mais par exemple par un script lancé par cron.
Le script va donc se lancer à l’heure prévue et le système distant va lui demander un mot de passe à entrer sauf… que vous n’êtes sans doute pas devant l’écran à ce moment là.
La solution consiste à utiliser des clés de chiffrement RSA.
Procédure
Nous disposons d’un client et d’un serveur et dans notre cas le serveur doit se connecter à un client sans mot de passe via SSH (Il doit par exemple lui envoyer un rapport journalier ou les fichiers des derniers backup)
Créer des clés sur le serveur
On génère une paire de clés privées/publiques sur le serveur, la clé privée sera stockée dans /user/.ssh/id_rsa
et la clé publique dans /user/.ssh/id_rsa.pub
# ssh-keygen |
Si vous entrez une “pass phrase” celle-ci sera utilisée pour la connexion. Si vous n’écrivez rien la connexion se fera automatiquement (sans mot de passe et sans pass phrase).
Et on envoie la clé publique au client :
# ssh-copy-id -i .ssh/id_rsa.pub client@ip |
Le mot de passe sera demandé une première fois pour copier la clef dans /home/client/.ssh/authorized_keys
Chez le client
Maintenant une connexion via ssh chez ce client précis se fera sans mot de passe.
Problème rencontré
Erreur de clés
Si lors de votre connexion ssh le serveur vous engueule à cause d’une histoire de clés :
/usr/lib/pymodules/python2.6/rdiff_backup/SetConnections.py:148: DeprecationWarning: |
Lorsqu’une machine établit une connexion vers une machine distante, elle va mémoriser son adresse et son empreinte dans /root/.ssh/known_hosts
. Si cette empreinte change (réinstallation du système par exemple) il y aura refus de connexion. Il faudra donc supprimer la ligne correspondante dans /root/.ssh/known_hosts
.
Si le problème persiste toujours :
# ssh-keygen -R @ip |
Celà mettra à jour les hosts du fichier known_hosts
Comparaison
Premiere connexion sur un serveur ou un client.
Avant toute connexion sur un autre serveur ou sur un autre client, ou avant tout échange de clés RSA, le dossier ~/.ssh/
est vide.
Lors d’une première connexion le système va demander une confirmation de connexion vers une machine qu’il ne connaît pas.
# ssh [email protected] |
En confirmant la connexion, le système va ajouter l’empreinte de la machine sur laquelle on souhaite se connecter dans le fichier ~/.ssh/known_hosts
nouvellement crée.
Are you sure you want to continue connecting (yes/no)? yes |
Puis il vous invitera à entrer le mot de passe.
[email protected]'s password: |
Ce mot de passe sera demandé à chaque connexion mais pas à la confirmation puisque l’hôte sera maintenant connu.
Le fichier ~/.ssh/known_hosts
contient maintenant la/les entrées correspondantes aux hôtes connus :
# cat .ssh/known_hosts |
Clés RSA
Après la génération des clés RSA (à l’aide de la commande ssh-keygen
) le système va créer les fichiers id_rsa
et id_rsa.pub
.
# ls -la .ssh/ |
Il sera ensuite possible de faire l’échange des clés publiques entre deux machines à l’aide de la commande ssh-copy-id -i .ssh/id_rsa.pub client@ip
et la connexion se fera sans mot de passe.
Le client possèdera un nouveau fichier ~/.ssh/authorized_keys
qui contiendra la clé publique du serveur.
Documentation
x