SSH sans mot de passe

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: 
os.popen2 is deprecated.
Use the subprocess module.
stdin, stdout = os.popen2(remote_cmd)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
19:41:c1:19:41:c1:19:41:c1:19:41:c1:19:41:c1
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:1
RSA host key for 42.42.42.42 has changed and you have requested strict checking.
Host key verification failed.
Fatal Error: Truncated header string (problem probably originated remotely)

Couldn't start up the remote connexion by executing

ssh -C [email protected] rdiff-backup --server

Remember that, under the default settings, rdiff-backup must be
installed in the PATH on the remote system. See the man page for more
information on this. This message may also be displayed if the remote
version of rdiff-backup is quite different from the local version (1.2.8).

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]
The authenticity of host '91.92.93.94 (91.92.93.94)' can't be established.
ECDSA key fingerprint is SHA256:smhjktkjfqlzsDFGOeprldgf3857skjsdzeçixmcl+OP.

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
Warning: Permanently added '91.92.93.94' (ECDSA) to the list of known hosts.

Puis il vous invitera à entrer le mot de passe.

[email protected]'s password: 
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-76-generic x86_64)

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 
|1|5dfSDFggdf5gdsf8erSDfgmdsfg=|mdfg543g/sfDMezaer45ze6dsff= dftgb-sha2-doptp256 AAAAùklsdjfSDQFLMSDKFsd7453sg74sdqfggSQDGKLMDsdgqd53sdMDLgfret564dqfgrfgsqd1/nnP33t9uqhWbofgWvko/FOZEscrri9YOoSIY9V1AmRzk3V5MxNRxKAtbWNdDc=
|1|9erSDfgmfSDFggdf5gdsfg/eNEI=|zerDSFes/L%MSDF543SDFF/perc= dftgb-sha2-doptp256 AAAAùklsdjfSDQFLMSDKFsd7453sg74sdqfggSQDGKLMDsdgqd53sdMDLgfret564dqfgrfgsqd1zrsrfzSDGFLMKQfzefsdfDSQfsd4f5sdgsq/jnQ5XJkmMmVck74ZR/yZsdfDFS=

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/
total 24
drwx------ 2 root root 4096 févr. 18 18:26 .
drwx------ 16 root root 4096 févr. 13 21:54 ..
-rw------- 1 root root 1675 févr. 18 18:26 id_rsa
-rw-r--r-- 1 root root 393 févr. 18 18:26 id_rsa.pub
-rw-r--r-- 1 root root 222 févr. 18 17:15 known_hosts

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

> Partager <