Ssh : le client libre de OpenSSH
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 secondesServerAliveCountMax 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) :
enter alt-gr+2 maj+.