Je veux fournir "Oui" automatiquement ou l'ignorer et procéder de manière SÉCURISÉE, lorsque l'instruction ci-dessous survient lors de l'exécution de mon script Expect Shell?.
#!/usr/bin/expect
spawn ssh $user@$Host
L'authenticité de l'hôte 'abcdef (10.566.1.98)' ne peut pas être établie. L'empreinte digitale de la clé RSA est jk: 94: ba: 93: 0b: eb: ff: df: ea: gh: hj: 23: 3c: hj: 9c: be. Voulez-vous vraiment continuer à vous connecter (oui/non)?
Se servir de exp_continue
pour ce scénario.
#!/usr/bin/expect
set Prompt "#|>|\\\$"
spawn ssh dinesh@myhost
expect {
#If 'expect' sees '(yes/no )', then it will send 'yes'
#and continue the 'expect' loop
"(yes/no)" { send "yes\r";exp_continue}
#If 'password' seen first, then proceed as such.
"password"
}
send "root\r"
expect -re $Prompt
Référence: Expect
Il est possible d'éviter cette question et d'accepter automatiquement toutes les clés entrantes en utilisant l'option client ssh StrictHostKeyChecking
définie sur no
(le paramètre par défaut est ask
, ce qui entraîne cette question):
ssh -o StrictHostKeyChecking=no "$user@$Host"
Cependant, notez que ce ne serait guère sûr, car vous acceptez essentiellement de vous connecter avec tous ceux qui peuvent agir en tant qu'hôte donné. Le seul moyen sûr d'éviter la question est de pré-distribuer les clés publiques de l'hôte aux clients, c'est-à-dire sous la forme d'un fichier d'hôtes connu pré-généré, qui peut être utilisé d'une manière comme celle-ci:
ssh \
-o UserKnownHostsFile=PATH_TO_YOUR_KNOWN_HOSTS_FILE \
-o StrictHostKeyChecking=yes "$user@$Host"
De cette façon, vous éviterez la question si la vérification échoue et ssh entraînera un état de sortie différent de zéro.
Cela fonctionne, et c'est particulièrement pratique pour les builds de docker
ssh-keyscan hostname.example.com >> $HOME/.ssh/known_hosts