Je suis aux prises avec le problème classique de saisie automatique du mot de passe dans ssh, et comme tout le monde je trébuche dans l'obscurité concernant s'attendre. Enfin, je bricolé un script qui fonctionne un peu:exit Attendez-vous {0 sans timeout
#!/usr/bin/expect -f
# command line args
set user_at_host [lrange $argv 0 0]
set password [lrange $argv 1 1]
set timeout 1
# ssh command
spawn ssh -S ~/.ssh/tmp.$user_at_host -M -N -f $user_at_host
# deal with ssh prompts
expect {
"*yes/no*" { send "yes\r" ; exp_continue }
"*assword:" { send "$password\r" ; exp_continue }
}
Ce script se termine que grâce à la ligne timeout 1
, sans elle, il se bloque tout simplement, et prendra fin que par l'interaction utilisateur (^C
). Lorsque la ligne spawn
était une commande ssh simple, le script s'est terminé immédiatement, mais il s'agit de not your straight forward ssh. La chose qui pourrait être différente est l'option -f
qui la fait fonctionner en arrière-plan (mais j'ai essayé le script sans succès). J'ai lu que interact
ou expect eof
pourrait aider, mais je n'ai pas pu trouver l'incantation correcte qui le fera réellement.
Ma question (je pense) est Comment faire un script attendu, qui engendre un processus d'arrière-plan, se terminer sans un délai?
Edit: Je serais attendu (sans jeu de mots) la réponse "utiliser l'authentification ssh passwordless". Bien que ce soit un bon conseil, ce n'est pas la solution appropriée dans mon scénario: Test automatique d'un système installé dans un environnement de confiance, où l'ajout de clés fiables à l'image n'est pas souhaitable/possible.
est-il un moyen de sortir juste après '* mot de passe:'? Quand j'ai essayé de remplacer le 'exp_continue' avec quelque chose d'autre, il a immédiatement quitté, mais n'a pas semblé' envoyer 'le '$ {mot de passe}'. –
Peut-être un «sommeil 1» ou «attendre eof» ou «wait»? –
Je suis désolé de l'avoir fait, mais je traîne, et peut-être pouvez-vous m'aider à diminuer le nombre de permutations que je dois tester: Devrait-il y avoir 'wait eof' /' sleep 1' à l'intérieur ou à l'extérieur de 'expect {...} '" boucle "? –