Ignorer temporairement mon fichier `~ / .ssh / known_hosts`?

48

Est-il possible d'ignorer temporairement mon ~/.ssh/known_hostsfichier?

mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 a 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 /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$ 

REMARQUE:

.. par quelques réponses / commentaires (s), je me rends compte que ma question est un peu trompeuse, donc bref, c'est le comportement attendu), il est donc normal (dans mon cas) qu'il existe une raison valable derrière veux voir "l'ignorer")

alexus
la source
9
Vous posez la mauvaise question. Vous ne devriez pas "ignorer" le problème; vous devriez comprendre ce qui se passe et le résoudre.
Michael Hampton
9
Je ne peux pas parler pour l'utilisateur, mais un exemple serait une situation dans laquelle vous développez un processus d'installation automatisé (tel qu'un kickstart), où votre flux de travail itératif implique la création, la connexion, le test, la modification du processus de construction et la reconstruction à partir de gratter encore et encore.
Goladus
10
@ MichaelHampton - Je reçois souvent ce message, car VMware et VirtualBox recyclent les adresses IP des invités. Pour moi, c'est la bonne question :)
1
FWIW Je continue à chercher cette réponse car j'ai un système sur mon réseau local dans lequel j'utilise un dropbear (avec une clé d'hôte différente) pour entrer le mot de passe de chiffrement du disque au démarrage.
Zulan
1
@jww Ceci n'est pas la bonne question / solution pour votre scénario. Au lieu de cela, vous devriez configurer SSH pour ignorer l’adresse IP tout en vérifiant la clé de l’hôte. Voir par exemple ici
Jon Bentley

Réponses:

56

Vous pouvez utiliser ssh -o StrictHostKeyChecking=nopour désactiver known_hostsmomentanément la vérification . Mais je déconseillerais cela. Vous devriez vraiment vérifier pourquoi la clé de l'hôte a changé.

Une autre option consiste à ajouter une entrée spécifique à votre ~/.ssh/configpour l'hôte en question. Cette approche peut être valide si vous avez un hôte spécifique qui génère de nouvelles clés d’hôte à chaque redémarrage et qui redémarre plusieurs fois par jour pour une raison valable.

Host <your problematic host>
  StrictHostKeyChecking no
Sami Laine
la source
c'est le comportement attendu) donc c'est normal (dans mon cas)
alexus
1
@ alexus Si c'est "prévu", vous pouvez appliquer l'option à un nom d'hôte / IP spécifique pour lequel vous prévoyez que cela se produira.
Chrylis -on grève-
1
@ alexus Et rappelez-vous que si vous faites cela, vous perdez quasiment toute la protection fournie par ssh. Vous pouvez aussi bien utiliser telnet, car il serait facile pour quelqu'un de vous MITM de capturer tout votre trafic.
Michael Hampton
1
Cela ne fonctionne plus (du moins pour OpenSSH_5.3p1)
mardi
-o StrictHostKeyChecking=nosupprime la possibilité de se connecter avec un mot de passe. L'absence d'indicateur à cet égard ne va-t-elle pas directement à l'encontre des principes Unix permettant à l'utilisateur de forcer le comportement? J'essaie actuellement de me connecter à une machine locale avec une adresse IP locale. La clé de l'hôte a changé car j'ai reformaté ladite machine. Tout ici a du sens et rien n’est un risque pour la sécurité dans les circonstances.
Wowfunhappy
31

Pour ignorer complètement votre fichier hosts connu dans un environnement POSIX, définissez les options GlobalKnownHostsFileet UserKnownHostsFilesur /dev/null:

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@host

La définition de l’ StrictHostKeyChecking=nooption vous permettra de vous connecter, mais SSH affichera tout de même un avertissement :

ssh -o StrictHostKeyChecking=no user@host

Comme d'autres l'ont noté, il est probablement préférable de s'attaquer au problème sous-jacent. Vous pouvez par exemple envisager l' authentification par certificat SSH pour vérifier les hôtes.

MattB
la source
2
Cela peut être une meilleure réponse que la plus votée actuellement car cela permet d’utiliser une authentification par mot de passe qui serait désactivée autrement (bien sûr, vous devez comprendre ce que vous faites avant de saisir votre mot de passe ...)
VZ.
Je suis un peu confus ici: ne devriez-vous pas également utiliser -o StrictHostKeyChecking=no en plus des -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/nulloptions? - pour une réponse finale de ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host:?
Gabriel Staples
J'ai trouvé en ligne: shellhacks.com/disable-ssh-host-key-checking
Gabriel Staples
5

Si vous avez réinstallé le serveur et que l'identification a donc été modifiée, supprimez simplement la ligne 155 spécifiée /Users/alexus/.ssh/known_hostset poursuivez.

Si vous passez d'un réseau privé à un autre, utilisez plutôt les noms d'hôte pour vous connecter, car le client ssh enregistre également les clés en fonction du nom d'hôte. Ajoutez quelque chose comme ceci à votre /etc/hosts:

10.52.11.171 server1
10.52.11.171 server2

puis utiliser ssh server1lorsqu’il est connecté au sous-réseau 1 et ssh server2lorsqu’il est connecté au sous-réseau2. De cette façon, les deux serveurs peuvent avoir des clés d’hôte différentes.

etagenklo
la source
Et si vous basculez entre deux réseaux privés et vous connectez à deux mêmes adresses IP?
alexus
1
J'ai édité ma réponse.
etagenklo
2
@alexus Ensuite, vous avez besoin d'IPv6 :) Mais cela aurait été une information utile dans votre question initiale.
Michael Hampton
2

-o StrictHostKeyChecking=no ne fonctionne que si l'hôte n'est pas déjà présent dans le fichier known_hosts.

Je pense que c'est plus propre (pas d'avertissements), si vous vous attendez à ce que la clé des hôtes change peut-être à cause du clonage de la machine virtuelle, imposez de ne pas tenir compte de ce type d'hôtes comme ceci:

# Handle possible SSH key changes
host_key=$(ssh-keyscan -t rsa ${host_ip})
grep "${host_key}" ~/.ssh/known_hosts >/dev/null || {
    ssh-keygen -R ${host_ip}
    echo ${host_key} >>  ~/.ssh/known_hosts
}

# connect as normal way
ssh root@${host_ip} "hostname"
Jose Sa
la source
2

Certaines personnes disent que ce n'est pas correct, vous ne devriez pas le faire, etc., mais j'ai également besoin de cela pour tester plusieurs appareils intégrés à maintes reprises. Vous devez désactiver StrictHostKeyChecking=no, c’est exact, mais également réinitialiser le fichier hosts connu sur /dev/null. Voici un exemple avec connexion psautomatique et sur périphérique distant.

sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host 'ps ax'
Eddso
la source
-2

Connectez-vous à tous vos serveurs (et si RedHat) rm -f /etc/ssh/ssh_host_*, puis redémarrez SSHD.

Cela créera de nouvelles clés d'hôte SSH qu'il n'est pas nécessaire d'ignorer.

Je ne peux penser qu'à un seul cas où des clés SSH clonées sur plusieurs serveurs sont non seulement souhaitées mais ne génèrent également aucun avertissement. Multiples d'un enregistrement A. Tous les hôtes avec l'enregistrement A ont la même clé.

Niels
la source
6
Cette réponse est incorrecte. L'empreinte est locale sur le client.
89c3b1b8-b1ae-11e6-b842-48d705