ssh: accepte automatiquement les clés

168

J'ai écrit ce petit script utilitaire:

for h in $SERVER_LIST; do ssh $h "uptime"; done

Lorsqu'un nouveau serveur est ajouté à $SERVER_LIST , le script est arrêté avec:

The authenticity of host 'blah.blah.blah (10.10.10.10)' can't be established.
RSA key fingerprint is a4:d9:a4:d9:a4:d9a4:d9:a4:d9a4:d9a4:d9a4:d9a4:d9a4:d9.
Are you sure you want to continue connecting (yes/no)?

J'ai essayé yes :

for h in $SERVER_LIST; do yes | ssh $h "uptime"; done

sans chance.

Existe-t-il un moyen de paramétrer ssh pour accepter automatiquement toute nouvelle clé?

    
posée Adam Matan 18.04.2012 - 11:11
la source

4 réponses

180

Utilisez l’option StrictHostKeyChecking, par exemple:

ssh -oStrictHostKeyChecking=no $h uptime

Cette option peut également être ajoutée à ~ / .ssh / config, par exemple:

Host somehost
    Hostname 10.0.0.1
    StrictHostKeyChecking no

Notez que lorsque les clés d’hôte ont changé, vous recevrez un avertissement, même avec cette option:

$ ssh -oStrictHostKeyChecking=no somehost uptime
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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
31:6f:2a:d5:76:c3:1e:74:f7:73:2f:96:16:12:e0:d8.
Please contact your system administrator.
Add correct host key in /home/peter/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/peter/.ssh/known_hosts:24
  remove with: ssh-keygen -f "/home/peter/.ssh/known_hosts" -R 10.0.0.1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
ash: uptime: not found

Si vos hôtes ne sont pas souvent réinstallés, vous pouvez le rendre moins sécurisé (mais plus pratique pour changer les clés d’hôte) avec l’option -oUserKnownHostsFile=/dev/null . Cela supprime toutes les clés de l'hôte reçues afin de ne jamais générer l'avertissement.

Avec 18.04, il existe une nouvelle possibilité: StrictHostKeyChecking=accept-new . De man 5 ssh_config :

If this flag is set to “accept-new” then ssh will automatically
add new host keys to the user known hosts files, but will not
permit connections to hosts with changed host keys.  If this flag
is set to “no” or “off”, ssh will automatically add new host keys
to the user known hosts files and allow connections to hosts with
changed hostkeys to proceed, subject to some restrictions.
    
réponse donnée Lekensteyn 18.04.2012 - 11:29
la source
96

Vous pouvez utiliser la commande suivante pour ajouter l’empreinte pour un serveur à votre known_hosts

ssh-keyscan -H <ip-address> >> ~/.ssh/known_hosts
ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

REMARQUE: Remplacez & lt; adresse IP & gt; et & lt; nom d'hôte & gt; avec le nom IP et DNS du serveur que vous souhaitez ajouter.

Le seul problème avec ceci est que vous allez vous retrouver avec quelques serveurs dans le known_hosts deux fois. Ce n'est pas vraiment une grosse affaire, juste mentionner. Pour vous assurer qu'il n'y a pas de doublons, vous pouvez d'abord supprimer tous les serveurs en exécutant les éléments suivants:

ssh-keygen -R <ip-address>
ssh-keygen -R <hostname>

Vous pouvez donc courir:

for h in $SERVER_LIST; do
    ip=$(dig +search +short $h)
    ssh-keygen -R $h
    ssh-keygen -R $ip
    ssh-keyscan -H $ip >> ~/.ssh/known_hosts
    ssh-keyscan -H $h >> ~/.ssh/known_hosts
done

Une chose à garder à l’esprit lorsque vous supprimez juste pour ajouter à nouveau, vous supprimez essentiellement la sécurité de la vérification de l’empreinte. Donc, vous ne voudrez certainement pas exécuter ce script avant chaque exécution de votre script utilitaire.

    
réponse donnée mhost 17.10.2013 - 02:24
la source
23

Je suis un peu en retard avec cette réponse, mais le moyen le plus judicieux serait de faire un ssh-keyscan sur la nouvelle machine avant de lancer la collecte.

ssh-keyscan  <newhost> >> ~/.ssh/known_hosts

Désactiver la vérification de la santé mentale pour plus de commodité semble être un mauvais plan, même si vous pensez maîtriser totalement l'environnement.

    
réponse donnée tink 24.11.2014 - 20:47
la source
0

Pour ajouter une liste de serveurs automatiquement, nous pouvons faire ci-dessous:

Ajouter des serveurs IP dans la liste des serveurs de fichiers

Les adresses IP doivent être ajoutées au format ci-dessous.

Sortie de cat servers-list

123.1.2.3
124.1.2.4
123.1.2.5

Modifiez les adresses IP ci-dessus en remplaçant les vôtres.

La commande ci-dessous ajoute tous les serveurs de la liste.

ssh-keyscan -p61 -H "'cat servers-list'" >> ~/.ssh/known_hosts
    
réponse donnée Waqas Khan 16.02.2018 - 08:46
la source

Lire d'autres questions sur les étiquettes