Ssh : le client libre de OpenSSH

De Linux Server Wiki
Aller à la navigation Aller à la recherche


La clé publique d'un de vos serveurs a changé

Lors de votre première connexion à un serveur ssh, le client ssh vous a demandé si vous vouliez lier l'hostname auquel vous vous connectez à la clé publique annoncée par le serveur ssh. L'acceptation est obligatoire pour vous connecter, et l'association est sauvegardé dans le fichier ~/.ssh/known_hosts. Ce mécanisme de sécurité permet de s'assurer que vous vous connectez toujours au bon serveur et que nous n'allez pas envoyer vos identifiants à un serveur corrompu.

Si, par exemple après une réinstallation, la clé d'un serveur a changé, le client ssh refusera de se connecter en spécifiant l'erreur suivante :

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /home/votrelogin/.ssh/known_hosts to get rid of this message.
Offending key in /home/votrelogin/.ssh/known_hosts:2
RSA host key for <ip> has changed and you have requested strict checking.
Host key verification failed.

Pour rétablir authentification, il faut supprimer la ligne correspondante du fichier ~/.ssh/known_hosts. Pour cela nous allons utiliser ssh-keygen

Pour voir la clé publique associée à un hostname :

ssh-keygen -F hostname

Pour supprimer la clé publique associée à un hostname :

ssh-keygen -R hostname

Vous pourrez ensuite relancer votre authentification ssh et associer la nouvelle clé à l'hostname.

Désactiver la vérification de la clé host lors de la connexion à un serveur SSH

Dans certains cas, il peut-être pratique de désactiver l'ajout automatique de la clé host d'un serveur ssh lorsqu'on s'y connecte. Ceci est en particulier très utile si vous utilisez des VMs chez vous et que vous les réinstallez souvent.

Pour désactiver temporairement la vérification de la clé host utilisez les arguments ssh suivants :

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no login@ip

Si vous souhaitez désactiver la vérification de la clé host pour tout un range ip (ip locale par exemple), ajoutez ceci dans votre fichier ~/.ssh/config :

Host 192.168.1.*
   StrictHostKeyChecking no
   UserKnownHostsFile=/dev/null

Éviter les déconnexions de votre session SSH

Si vous constatez que lors d'une inactivité plus ou moins longue, vous perdez la connexion avec votre serveur SSH, la solution consiste à faire transiter un minimum de données automatiquement pour éviter la coupure de la connexion TCP par votre routeur. Ajoutez les lignes suivantes dans le fichier .ssh/config :

ServerAliveInterval 60
ServerAliveCountMax 20
  • ServerAliveInterval 60 précise qu'il faudra envoyer des données automatiquement toutes les 60 secondes
  • ServerAliveCountMax 20 précise que le client ssh doit attendre 20 absences de réponse du serveur pour considérer la connexion comme morte.

Notez que vous pouvez faire de même sur votre serveur (afin de régler le problème une fois pour toute pour tous les utilisateurs de votre serveur) grâce à la directive ClientAliveInterval à ajouter dans le fichier /etc/ssh/sshd_config.

Fermer les connexions ssh bloquées

SI votre connexion internet plante, il se peut que vos sessions ssh ne répondent plus. Si vous avez de la chance, la session se fermera d'elle même très vite avec un Write failed: Broken pipe

Si ce n'est pas le cas, vous pouvez fermer la connexion avec une combinaison de trois touches : enter tilde (~) et point (.) (appuyés séparément). Sur un layout par défaut, il faudra appuyer sur alt-gr en meme temps que ~ et sur maj en même temps que point.