web-dev-qa-db-fra.com

comment éviter que ssh demande la permission?

Nous tentons d'accélérer l'installation des nœuds Oracle pour l'installation de RAC. cela nécessite que ssh soit installé et configuré pour qu'il ne demande pas de mot de passe.

Le problème est le suivant: lors de la première utilisation, nous sommes invités à

RSA key fingerprint is 96:a9:23:5c:cc:d1:0a:d4:70:22:93:e9:9e:1e:74:2f.
Are you sure you want to continue connecting (yes/no)? yes

Existe-t-il un moyen d'éviter cela ou sommes-nous condamnés à nous connecter au moins une fois sur chaque serveur à partir de chaque serveur manuellement?

70

Mise à jour de décembre 2019:

Comme Chris Adams l'a souligné ci-dessous, il y a eu un changement assez important à Openssh au cours des 6,5 années écoulées depuis la rédaction de cette réponse, et il existe une nouvelle option qui est beaucoup plus sûre que les conseils originaux ci-dessous:

* ssh(1): expand the StrictHostKeyChecking option with two new
   settings. The first "accept-new" will automatically accept
   hitherto-unseen keys but will refuse connections for changed or
   invalid hostkeys. This is a safer subset of the current behaviour
   of StrictHostKeyChecking=no. The second setting "off", is a synonym
   for the current behaviour of StrictHostKeyChecking=no: accept new
   Host keys, and continue connection for hosts with incorrect
   hostkeys. A future release will change the meaning of
   StrictHostKeyChecking=no to the behaviour of "accept-new". bz#2400

Ainsi, au lieu de définir StrictHostKeyChecking no dans ton ssh_config fichier, définissez StrictHostKeyChecking accept-new.


Ensemble StrictHostKeyChecking no dans ton /etc/ssh/ssh_config fichier, où ce sera une option globale utilisée par tous les utilisateurs du serveur. Ou placez-le dans votre ~/.ssh/config fichier, où il sera la valeur par défaut uniquement pour l'utilisateur actuel. Ou vous pouvez l'utiliser sur la ligne de commande:

ssh -o StrictHostKeyChecking=no -l "$user" "$Host"

Voici une explication de la façon dont cela fonctionne à partir de man ssh_config (ou voir cette version plus récente ):

StrictHostKeyChecking

      Si cet indicateur est défini sur "oui", ssh n'ajoutera jamais automatiquement de clés d'hôte à $HOME/.ssh/known_hostsfile et refuse de se connecter aux hôtes dont la clé d'hôte a changé. Cela offre une protection maximale contre les attaques de chevaux de Troie, mais peut être ennuyeux lorsque le /etc/ssh/ssh_known_hostsfile est mal entretenu ou des connexions à de nouveaux hôtes sont fréquemment établies. Cette option oblige l'utilisateur à ajouter manuellement tous les nouveaux hôtes. Si cet indicateur est défini sur "non", ssh ajoutera automatiquement de nouvelles clés d'hôte aux fichiers d'hôtes connus de l'utilisateur. Si cet indicateur est défini sur "demander", de nouvelles clés d'hôte ne seront ajoutées aux fichiers d'hôte connus de l'utilisateur qu'après que l'utilisateur a confirmé que c'est ce qu'il veut vraiment faire, et ssh refusera de se connecter aux hôtes dont la clé d'hôte a changé. Les clés d'hôte des hôtes connus seront vérifiées automatiquement dans tous les cas. L'argument doit être "oui", "non" ou "demander". La valeur par défaut est "demander".
101
Tim Kennedy

ssh-keyscan - Rassemblez les clés publiques ssh

Si vous connaissez déjà la liste des hôtes auxquels vous vous connecterez, vous pouvez simplement émettre:

ssh-keyscan Host1 Host2 Host3 Host4

Vous pouvez donner le -H option pour qu'il hache les résultats comme ssh par défaut maintenant

Vous pouvez également donner -t keytype étaient type de clé est dsa, rsa ou ecdsa si vous avez une préférence quant au type de clé à récupérer au lieu de la valeur par défaut .

Une fois que vous avez exécuté ssh-keyscan il aura pré-rempli votre fichier d'hôtes connus et vous n'aurez pas ssh vous demandant la permission d'ajouter une nouvelle clé.

29
kurtm

Vous pouvez ajouter l'empreinte digitale aux hôtes connus de chaque serveur. Pour un seul utilisateur:

cat ~/.ssh/known_hosts
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts
12
David Souther

Ignorer l'hôte

Ignorez HostKeyChecking. Pour cela j'utilise par exemple:

ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null [email protected]

Ajouter un hôte

Ajoutez l'empreinte digitale de l'hôte/serveur à .ssh/known_hosts avant votre première connexion. C'est le moyen le plus sûr.

11
xebeche

Exécutez l'extrait de code suivant avant d'essayer.

mkdir -p ~/.ssh     
echo "Host *" > ~/.ssh/config     
echo " StrictHostKeyChecking no" >> ~/.ssh/config

ps: strictement pas pour les serveurs de production, méfiez-vous de ManInMiddle

3
147.3k

Exécutez l'extrait de code suivant avant d'essayer.

mkdir -p ~/.ssh  &&  echo "Host *" > ~/.ssh/config && echo " StrictHostKeyChecking no" >> ~/.ssh/config

ps: strictement pas pour les serveurs de production, méfiez-vous de ManInMiddle

1

J'aime la réponse de Tim pour des choses hors type, cependant, si c'est un hôte auquel vous avez l'intention de vous connecter régulièrement, je créerais une entrée dans votre ~/.ssh/config (créez-la si le fichier n'existe pas).

# this example shows wildcard for IP
# you can even use more than one wildcard 10.0.*.* for example
Host 192.168.56.*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
# you can even alias it, which is really useful when scp'ing/rsyncing foo:/path/to/remote
Host foo
    HostName foo-long-192-10-135-55.hostname.not-going-to-remember.doh
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
0
Jaime