J'essaie de SSH depuis le bureau X vers quelques boîtes Linux dans le bureau Y. Les boîtes Linux dans le bureau Y sont derrière NAT et chacune s'exécute sur leurs propres ports. Je peux tous les atteindre avec succès via SSH, mais je ne peux pas m'authentifier.
J'ai pu SSH dans la première case, mais quand je suis arrivé à la seconde, il a dit:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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
[edited out fingerprint]
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
D'après ce que je comprends, il s'attend à voir la même clé à partir de cette adresse IP publique, mais il en voit une autre parce que c'est un serveur SSH différent.
Comment puis-je le corriger pour qu'il crée / accepte une clé différente de chaque serveur derrière cette même adresse IP?
Réponses:
Le nom d'hôte ou l'adresse IP est stocké sous forme de hachage (ou en texte brut selon les options et les valeurs par défaut de la version) dans votre
known_hosts
fichier. La solution de contournement la plus simple consiste à ajouter une entrée pour chaque hôte au/etc/hosts
fichier DNS ou (ugh!) Avec la même adresse IP (WAN), comme dans/etc/hosts
:puis
ssh
par nom d'hôte et port.la source
Il existe plusieurs façons de résoudre ce problème:
Vous pouvez désactiver la vérification des clés d'hôte pour cet hôte particulier. Dans votre
ssh_config
fichier (~/.ssh/config
), mettez quelque chose comme:Cela configure
ssh
pour ne jamais stocker les clés d'hôteremote.host.name
, mais l'inconvénient est que vous êtes maintenant ouvert aux attaques de l'homme du milieu (parce que vous acceptez aveuglément les clés d'hôte, vous ne pouvez pas dire si la clé d'hôte distante a changé).Vous pouvez utiliser une technique similaire pour donner simplement à chaque hôte un
known_hosts
fichier unique :Vous vous connecterez alors à ces hôtes avec
ssh hosta
oussh hostb
, etssh
prendrez le nom d'hôte et le port réels du fichier de configuration.la source
/etc/hosts
fichier fonctionnera également. J'aime mieux cela car (a) il ne nécessite pas de privilèges élevés et (b) cela signifie que vous n'avez pas besoin de spécifier les numéros de port sur la ligne de commande.~/.ssh/config
(un port différent pour chacunhosta
hostb
) comme décrit dans la réponse de larsks. De même, vous pouvez spécifier différents noms d'utilisateur, clés, etc. dans ce fichier de configuration pour les différents hôtes, de sorte que tout ce que vous avez à faire sur la ligne de commande estssh hosta
oussh hostb
HostKeyAlias
directive plutôt que de diviser les hôtes connus en différents fichiers. par exempleHostKeyAlias hosta
Vous ne dites pas quelle version de Solaris (et, plus important encore, SSH) vous utilisez, mais des versions suffisamment à jour d'OpenSSH ont résolu ce problème.
Voici deux entrées de mon
known_hosts
fichier, qui ont la même adresse IP mais des numéros de port différents (l'un est le 22 implicite); comme vous pouvez le voir, les clés stockées ne sont pas les mêmes.Je ne sais pas quelle version d'OpenSSH a introduit cela, mais je cours
la source
Pour développer mon commentaire sur la réponse @larsks, je pense que l'utilisation d'
~/.ssh/config
entrées est bien meilleure que la modification de / etc / hosts, bien que j'utiliseraisHostKeyAlias
plutôt que de diviser les hôtes connus en différents fichiers. par exemple:Et de même pour
hostb
la source