Je peux me connecter à un autre ordinateur Ubuntu de mon réseau local via SSH. Sur les deux ordinateurs, j'ai installé openssh-server mais à partir d'un autre ordinateur Ubuntu, je ne peux pas me connecter à mon PC via SSH et j'ai eu cette erreur:
La vérification de la clé de l'hôte a échoué ...
"Echec de la vérification de la clé de l'hôte" signifie que la clé de l'hôte de l'hôte distant a été modifiée.
SSH stocke les clés d'hôte des hôtes distants dans ~/.ssh/known_hosts
. Vous pouvez soit modifier ce fichier texte manuellement et supprimer l'ancienne clé (vous pouvez voir le numéro de ligne dans le message d'erreur), soit utiliser
ssh-keygen -R hostname
(ce que j’ai appris de la réponse à Est-il possible de supprimer une clé d’hôte particulière du fichier Répondants SSH de SSH? ).
Si vous exécutez certaines situations de script/à distance dans lesquelles vous ne disposez pas d'un accès interactif à la clé Invite-à-ajouter-host-host, procédez comme suit:
$ ssh -o StrictHostKeyChecking=no [email protected] uptime
Avertissement: Ajout permanent de 'quelque chose.exemple.com, 10.11.12.13' (RSA) à la liste des hôtes connus.
De plus, il arrive parfois que vous travailliez sur une console série. Lorsque vous vérifiez la commande ci-dessus en mode explicite, -v
vous montrera que /dev/tty
n'existe pas, alors qu'il existe.
ssh -v user@hostname
Dans le cas précédent, supprimez simplement /dev/tty
et créez un lien symbolique de /dev/ttyS0
à /dev/tty
.
rm /dev/tty
ln -s /dev/ttyS0 /dev/tty
En guise d'alternative, ajoutez id_rsa.pub
à l'emplacement distant, afin que le mot de passe ne soit pas demandé et que vous obteniez un accès à la connexion.
Dans mon cas, cela était dû à un problème udev: il n'y avait pas de noeud de périphérique /dev/tty
. La solution pour moi était juste:
Sudo mknod -m 666 /dev/tty c 5 0
Sur le terminal:
ssh -o StrictHostKeyChecking=no -i YourPublicKey.pem [email protected] uptime
Le message suivant, ou similaire, apparaîtra:
Warning: Permanently added 'example.com, XX.XXX.XXX.XX' (ECDSA) to the list of known hosts.
00:47:37 up 3 min, 0 users, load average: 0.00, 0.00, 0.00
Ensuite, connectez-vous à votre EC2 normalement:
ssh -i YourPublickey.pem [email protected]
Eh bien, tout simplement parce que le second Ubuntu nécessite une connexion par clé et non par mot de passe.
Je vous suggère d’utiliser Sudo dpkg-reconfigure openssh-server
sur votre ordinateur, puis il devrait fonctionner correctement. Il réinitialisera la configuration pour openssh et devrait revenir à une authentification par mot de passe par défaut.
La deuxième possibilité est qu’il existe déjà une clé pour votre autre ubuntu dans votre PC et que celle-ci a changé, de sorte qu’elle n’est plus reconnue. Dans ce cas, vous devrez éditer le fichier .ssh/authorized_keys
pour supprimer la ligne problématique identifiant votre ubuntu.
C'est un vieux fil et je viens de rencontrer cette réponse, je vais juste ajouter ce que j'ai fait pour résoudre ce problème.
ssh-keygen -f "/home/USER/.ssh/known_hosts" -R HOSTNAME
Je viens de regarder le message d'erreur qu'il m'a jeté et il a dit d'exécuter cette commande afin de le supprimer de la liste des hôtes. Après cela, j'ai fait ce qui suit:
ssh-copy-id HOSTNAME
Puis j'ai suivi les instructions à partir de là jusqu'à ce que je puisse ssh dans le serveur.
Cela signifie que votre clé d'hôte distant a été modifiée (peut être un changement de mot de passe d'hôte),
Votre terminal a suggéré d'exécuter cette commande en tant qu'utilisateur root
$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231
Vous devez supprimer ce nom d’hôte de la liste des hôtes sur votre ordinateur/serveur. Copiez cette commande suggérée et exécutez-la en tant qu'utilisateur root.
$ Sudo su // Login as a root user
$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231 // Terminal suggested command execute here
Host [www.website.net]:4231 found: line 16 type ECDSA
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old
$ exit // Exist from root user
$ Sudo ssh [email protected] -p 4231 // Try again
J'espère que ça marche.
Vous devriez changer votre clé de la manière suivante: Trouvez dans votre erreur donnée quelle clé d’hôte a été modifiée, par exemple: Clé ECDSA incriminée dans /Users/user-name/.ssh/known_hosts:5, la cinquième clé a été modifiée, procédez comme suit:
sed -i '5d' ~/.ssh/known_hosts
Remarque: vous devez être root ou avoir le privilège de Sudo.
Peut-être avez-vous juste besoin d'entrer "oui" lorsque ssh confirme que vous souhaitez continuer à vous connecter.
Comme ci-dessous.
The authenticity of Host 'xxx' can't be established.
ECDSA key fingerprint is yyy.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xxx' (ECDSA) to the list of known hosts.
Enter passphrase for key '/Users/ysy/.ssh/id_rsa':
Puis entrez votre mot de passe.
Veuillez faire attention à "Êtes-vous sûr de vouloir continuer à vous connecter (oui/non)? oui". Vous devez entrer oui, pas entrer.
vous devez mettre la clé rsa de l'hôte cible dans l'hôte source /home/user/.ssh/known_hosts
en l'exécutant sur la cible
ssh-keyscan -t rsa @targethost
Ma solution provient de cet article de blog: Échec de la négociation de l'algorithme pour le client SSH Secure Shell
Vous devez modifier le fichier comme suit:
Sudo nano /etc/ssh/sshd_config
Et puis ajoutez ce qui suit:
# Ciphers
Ciphers aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,arcfour
KexAlgorithms diffie-hellman-group1-sha1
En gros, vous avez essayé différentes solutions jusqu'à ce que vous en trouviez une qui puisse résoudre votre problème. Si les solutions ci-dessus ne fonctionnent pas, essayez celle-ci. Si celui-ci ne fonctionne pas aussi bien, veuillez en essayer d'autres.
Désactivez simplement la vérification stricte de la clé d’hôte dans votre ~/.ssh/config:
Host *
StrictHostKeyChecking no
pico ~/.ssh/known_hosts
et supprimez toutes les lignes, après juste vous reconnecter et vous obtiendrez une nouvelle clé.