Question 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.

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


171
2018-04-18 09:11


origine


La réponse de Lekensteyn est excellente et correcte, mais je voulais juste noter que puisque ssh attend "oui" et yes sorties "y", vous pourriez avoir plus de chance avec for h in $SERVER_LIST; do yes yes | ssh $h "uptime"; done (notez le oui supplémentaire, qui dit oui quoi dire au lieu de "y"). - chazomaticus


Réponses:


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 obtenez 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 cela moins sécurisé (mais plus pratique pour changer les clés d’hôte) avec -oUserKnownHostsFile=/dev/null option. Cela supprime toutes les clés d'hôte reçues afin de ne jamais générer l'avertissement.


Avec 18.04, il y a 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.

185
2018-04-18 09:29



Ce n'est pas la meilleure solution car elle contourne les outils de sécurité intégrés. ssh-keyscan est préférable si elle est disponible sur votre système. - Stefan Lasiewski
@StefanLasiewski Il permet à l'homme dans le milieu des attaques si vous êtes sur des réseaux non fiables. Pour accepter de nouvelles clés sur des hôtes fixes, le ssh-keyscan l'approche est plus saine. Pour les machines virtuelles locales et les autres hôtes des réseaux sécurisés dotés d'adresses IP dynamiques / réutilisées, l'approche décrite est suffisante. - Lekensteyn
Juste pour clarifier la différence entre les deux solutions: ssh-keyscan la solution est seulement sujette à une attaque de l'homme en une seule fois ssh-keyscan est en cours d'exécution. le -oStrictHostKeyChecking=no la solution est sujette à une attaque homme-à-chaque chaque fois sshest en cours d'exécution. - Erik Sjölund


Vous pouvez utiliser la commande suivante pour ajouter l'empreinte digitale d'un serveur à vos known_hosts

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

REMARQUE: Remplacez <adresse-ip> et <nom-hôte> par le nom IP et le nom 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 en mentionnant. 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>

Donc vous pourriez 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 ré-ajouter, vous supprimez essentiellement la sécurité de la vérification de l'empreinte digitale. Vous ne voudrez donc certainement pas exécuter ce script avant chaque exécution de votre script utilitaire.


96
2017-10-17 00:24



l'exécuter en triant | uniq et ensuite rechercher l'hôte dupliqué en utilisant awk after rendrait le script capable de détecter les hôtes modifiés et avertir les utilisateurs uniquement de ceux-ci, car un même hôte avec des clés différentes pourrait entraîner des problèmes - Lennart Rolland
Vous voudrez peut-être ajouter une note -H hache les noms d'hôtes et les adresses. - David Cullen


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

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

Désactiver le contrôle d'intégrité pour des raisons pratiques semble être un mauvais plan, même si vous pensez que vous contrôlez totalement l'environnement.


23
2017-11-24 19:47



C'est en fait ce que je cherchais. Merci. - user156516
exécuter la commande ci-dessus et ne pas vérifier les clés de l'hôte contre les empreintes digitales acquises hors bande est vulnérable de la même manière que StrictHostKeyChecking no - code_monk
@code_monk: non, ce n'est pas le cas. J'ouvre un unique possibilité d'échec (accepter une clé d'un hôte incorrect à ajouter aux hôtes connus). StrictHostKeyChecking no permettra de répéter accepte pour les autres machines. - tink


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

Changez 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

0
2018-02-16 07:46