web-dev-qa-db-fra.com

ssh: accepte automatiquement les clés

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.

Est-il possible de paramétrer ssh pour accepter automatiquement toute nouvelle clé?

207
Adam Matan

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 de l'hôte ont changé, vous recevez 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 rendre cette opération moins sécurisée (mais plus pratique pour les clés d’hôte fréquemment modifiées) avec l’option -oUserKnownHostsFile=/dev/null. Cela supprime toutes les clés d'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.
230
Lekensteyn

Vous pouvez utiliser la commande suivante pour ajouter l'empreinte digitale d'un serveur à votre hôte connu.

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

REMARQUE: Remplacez <adresse ip> et <nomhôte> par les noms IP et DNS du serveur que vous souhaitez ajouter.

Le seul problème avec ceci est que vous allez vous retrouver deux fois avec certains serveurs de votre unknown_hosts. Ce n'est pas vraiment un gros problème, juste mentionner. Pour vous assurer qu'il n'y a pas de doublons, vous pouvez d'abord supprimer tous les serveurs en lançant les éléments suivants:

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

Pour que vous puissiez 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 effectuez une suppression 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.

113
mhost

Je suis un peu en retard avec cette réponse, mais la solution sensée serait de faire un scan ssh-keys sur la nouvelle machine avant d'exécuter la collecte du temps de disponibilité.

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

Désactiver le test de bon sens pour des raisons de commodité sonne comme un mauvais plan, même si vous pensez que vous maîtrisez totalement l'environnement.

24
tink

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

Ajouter des serveurs IP dans la liste de 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

Changez d'IP ci-dessus en remplaçant le vôtre.

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

ssh-keyscan -p61 -H "`cat servers-list`" >> ~/.ssh/known_hosts
0
Waqas Khan