282 votes

ssh : accepter automatiquement les clés

J'ai écrit ce petit utilitaire script :

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 succès.

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

334voto

Lekensteyn Points 162346

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 obtiendrez 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ûr (mais plus pratique pour les clés d'hôtes qui changent souvent) avec l'option -oUserKnownHostsFile=/dev/null option. Cette option rejette toutes les clés d'hôte reçues, de sorte que l'avertissement ne sera jamais généré.


Avec la 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.

147voto

JamesWampler Points 113

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

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

NOTE : Remplacez < adresse ip > et < nom d'hôte > par l'IP et le nom dns du serveur que vous voulez ajouter.

Le seul problème avec cette méthode est que vous vous retrouverez avec certains serveurs dans votre known_hosts deux fois. Ce n'est pas vraiment un problème, je le signale simplement. Pour vous assurer qu'il n'y a pas de doublons, vous pouvez d'abord supprimer tous les serveurs en exécutant d'abord ce qui suit :

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

Donc tu pourrais 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

Il faut garder à l'esprit que lorsque vous supprimez un élément pour le réinscrire, vous supprimez essentiellement la sécurité de la vérification de l'empreinte digitale. Donc vous ne voudriez certainement pas exécuter ce script avant chaque exécution de votre script utilitaire.

31voto

Kamil Points 55

Je suis un peu en retard dans ma réponse, mais la façon la plus sensée de procéder serait d'effectuer un ssh-keyscan sur la nouvelle machine avant d'exécuter la collecte de temps de fonctionnement.

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

Désactiver le contrôle de l'état d'esprit pour des raisons pratiques semble être un mauvais plan, même si vous pensez contrôler totalement l'environnement.

4voto

Samarth S Points 41

Ajoutez cette entrée dans ~/.ssh/config fichier

Host *
    StrictHostKeyChecking no

S'il se plaint de l'autorisation d'accès pour ~/.ssh/config puis essayez

$ chmod 644 ~/.ssh/config

2voto

Lossow Points 131

Afin d'ajouter une liste de serveurs automatiquement, nous pouvons faire ce qui suit :

Ajouter l'IP des serveurs dans le fichier servers-list

Les IPs doivent être ajoutés dans le format ci-dessous.

Sortie de cat servers-list

123.1.2.3
124.1.2.4
123.1.2.5

Changez les IPs ci-dessus en remplaçant les vôtres.

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

ssh-keyscan -H "`cat servers-list`" >> ~/.ssh/known_hosts

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X