Boucle une fonction avec condition spécifique

J’ai une fonction:

set timeout 20 set f [open "password.txt"] set password [read $f] close $f spawn ssh [email protected] -p 724 expect "[email protected]'s password:" send $password interact 

dans le password.txt je n’ai qu’un mot

Après avoir exécuté ce script en utilisant expect dans le terminal, j’ai access au serveur si ce seul mot existant est le bon.

J’ai 2 problèmes:

RESOLU ——— 1) Je veux boucler l’exécution de ce script de manière à ce que, dans le cas où j’aurais 2,5,100 mots dans password.txt le script essaye tous les mots de passe, pas seulement le premier tel qu’il est maintenant.

2) Si je parviens à boucler l’exécution de la fonction en utilisant tous les mots du password.txt , je dois faire une instruction if qui résoudra ce problème (après 3 tentatives d’écriture, le serveur de mot de passe vous déconnecte, vous devez vous connecter à nouveau après chaque 3 tentatives.)

Mise à jour: le serveur répond après les 2 premières tentatives comme cette Permission denied, please try again. après la dernière tentative (3ème), on dit Permission denied (publickey,password). et il me jette dans mon état de ligne de commande normal.

J’essaye de faire quelque chose comme

 while read line do echo "Trying: $line" echo ssh [email protected] -p 724 --password "$line" ## NOT REAL CODE done < password.txt 

mais ne savez pas comment implémenter cette logique dans la syntaxe attendue.

Jusqu’à présent, j’ai réussi à écrire ceci

 set timeout 20 set f [open "password.txt" r] set password [read $f] close $f foreach i $password { puts "trying this as a pass : $i" spawn ssh [email protected] -p 724 expect "[email protected]'s password:" send $i interact } 

Cela me résout mon premier problème mais le bug est que je dois appuyer sur manaul “enter” après que le serveur demande le mot de passe. Et après avoir cliqué sur “enter”, le script essaie le premier mot de la liste, puis, si ce n’est pas le cas, j’appuie sur “enter” et le script essaiera le deuxième mot de la liste.

Comment puis-je simuler en appuyant sur “enter” dans le script?