web-dev-qa-db-fra.com

ssh: l'authenticité de l'hôte 'nom d'hôte' ne peut pas être établie

Quand je ssh à une machine, parfois, je reçois cet avertissement d'erreur et il me demande de dire "oui" ou "non". Cela cause quelques problèmes lors de l'exécution de scripts qui ssh automatiquement vers d'autres machines.

Message d'alerte: 

The authenticity of Host '<Host>' can't be established.
ECDSA key fingerprint is    SHA256:TER0dEslggzS/BROmiE/s70WqcYy6bk52fs+MLTIptM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'pc' (ECDSA) to the list of known hosts.

Existe-t-il un moyen de dire automatiquement "oui" ou de l'ignorer?

132
Senthil A Kumar

Selon votre client ssh, vous pouvez définir l'option StrictHostKeyChecking sur non sur la ligne de commande et/ou envoyer la clé à un fichier null known_hosts. Vous pouvez également définir ces options dans votre fichier de configuration, pour tous les hôtes ou pour un ensemble donné d'adresses IP ou de noms d'hôte.

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

MODIFIER

Comme @IanDunn le fait remarquer, cela présente des risques pour la sécurité. Si la ressource à laquelle vous vous connectez a été usurpée par un attaquant, celui-ci pourrait éventuellement rejouer le défi du serveur de destination, vous laissant croire que vous vous connectez à la ressource distante alors que vous vous connectez à cette ressource avec vos références. Avant de modifier votre mécanisme de connexion afin d’éviter HostKeyChecking, vous devez déterminer avec soin si ce risque est approprié.

Référence .

112
cori

Ancienne question qui mérite une meilleure réponse.

Vous pouvez empêcher une invite interactive sans désactiver la variable StrictHostKeyChecking (qui n'est pas sécurisée).

Incorporez la logique suivante dans votre script:

if [ -z `ssh-keygen -F $IP` ]; then
  ssh-keyscan -H $IP >> ~/.ssh/known_hosts
fi

Il vérifie si la clé publique du serveur est en known_hosts. Sinon, il demande la clé publique au serveur et l'ajoute à known_hosts

De cette façon, vous n'êtes exposé qu'une seule fois à l'attaque de l'homme du milieu, ce qui peut être atténué par:

  • s'assurer que le script se connecte pour la première fois sur un canal sécurisé
  • inspecter les journaux ou connus_hôtes pour vérifier les empreintes digitales manuellement (à effectuer une seule fois)
65
Grzegorz Luczywo

Pour désactiver (ou contrôler la désactivation), ajoutez les lignes suivantes au début de /etc/ssh/ssh_config...

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

Options:

  • Le sous-réseau de l'hôte peut être * pour permettre un accès illimité à toutes les adresses IP.
  • Modifiez /etc/ssh/ssh_config pour la configuration globale ou ~/.ssh/config pour une configuration spécifique à l'utilisateur. 

Voir http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-Host-key-checking.html

Question similaire sur superuser.com - voir https://superuser.com/a/628801/55163

33
Jim Fred

Assurez-vous que ~/.ssh/known_hosts est accessible en écriture. Cela a réglé le problème pour moi.

15
richard

Editez votre fichier de configuration normalement situé dans '~/.ssh/config', et au début du fichier, ajoutez les lignes ci-dessous 

Host *
    User                   your_login_user
    StrictHostKeyChecking  no
    IdentityFile          ~/my_path/id_rsa.pub

L'utilisateur défini sur your_login_user indique que ces paramètres appartiennent à votre_utilisateur_login
StrictHostKeyChecking défini sur no évitera l’invite
IdentityFile est le chemin d'accès à la clé RSA 

Cela fonctionne pour moi et mes scripts, bonne chance à vous.

10
Carlos M G T

La meilleure façon de procéder consiste à utiliser «BatchMode» en plus de «StrictHostKeyChecking». De cette façon, votre script acceptera un nouveau nom d'hôte et l'écrira dans le fichier known_hosts, mais ne nécessitera pas d'intervention oui/non.

ssh -o BatchMode=yes -o StrictHostKeyChecking=no [email protected] "uptime"
9
Cory Ringdahl

Cet avertissement est émis pour des raisons de sécurité. Ne désactivez pas cette fonctionnalité.

C'est juste affiché une fois. 

S'il apparaît toujours après la deuxième connexion, le problème provient probablement de l'écriture dans le fichier known_hosts . Dans ce cas, vous obtenez également le message suivant:

Failed to add the Host to the list of known hosts 

Vous pouvez résoudre ce problème en changeant le propriétaire des modifications des autorisations du fichier afin qu'elles soient accessibles en écriture par votre utilisateur.

Sudo chown -v $USER ~/.ssh/known_hosts
6
Sfisioza

En référence à la réponse de Cori, je l'ai modifiée et utilisé la commande ci-dessous, qui fonctionne. Sans exit, la commande restante était en fait une journalisation sur une machine distante, ce que je ne voulais pas dans le script

ssh -o StrictHostKeyChecking=no user@ip_of_remote_machine "exit"
4
Chintamani Manjare

Généralement, ce problème se produit lorsque vous modifiez les clés très souvent. Selon le serveur, la mise à jour de la nouvelle clé générée et collée sur le serveur peut prendre un certain temps. Donc, après avoir généré la clé et collé sur le serveur, attendez 3 à 4 heures, puis essayez. Le problème devrait être résolu. C'est arrivé avec moi.

2
mk..

Idéalement, vous devriez créer une autorité de certification autogérée. Commencez par générer une paire de clés: ssh-keygen -f cert_signer  

Puis signez la clé d'hôte publique de chaque serveur: ssh-keygen -s cert_signer -I cert_signer -h -n www.example.com -V +52w /etc/ssh/ssh_Host_rsa_key.pub

Cela génère une clé d'hôte publique signée: /etc/ssh/ssh_Host_rsa_key-cert.pub

Dans /etc/ssh/sshd_config, pointez la HostCertificate dans ce fichier: HostCertificate /etc/ssh/ssh_Host_rsa_key-cert.pub

Redémarrez le service sshd: service sshd restart

Ensuite, sur le client SSH, ajoutez ce qui suit au ~/.ssh/known_hosts: @cert-authority *.example.com ssh-rsa AAAAB3Nz...cYwy+1Y2u/

Ce qui précède contient:

  • @cert-authority
  • Le domaine *.example.com
  • Le contenu complet de la clé publique cert_signer.pub 

La clé publique cert_signer fera confiance à tout serveur dont la clé d'hôte publique est signée par la clé privée cert_signer

Bien que cela nécessite une configuration ponctuelle côté client, vous pouvez faire confiance à plusieurs serveurs, y compris ceux qui n'ont pas encore été provisionnés (à condition de signer chaque serveur).

Pour plus de détails, voir cette page wiki

1
Robert Chen

Faites ceci -> Chmod + w ~/.ssh/known_hosts Cela ajoute une permission en écriture au fichier à ~/.ssh/known_hosts. Après cela, l'hôte distant sera ajouté au fichier known_hosts lors de votre prochaine connexion.

1
Akshayraj Kore

Ajoutez-les à votre/etc/ssh/ssh_config

Host *
UserKnownHostsFile=/dev/null
StrictHostKeyChecking=no
0
Kevin Nguyen

Exécuter ceci dans le serveur hôte, c'est un problème de prémonition 

chmod -R 700 ~/.ssh
0
Robert A