2010-08-04 9 views
1

J'utilise 'expect' pour automatiser l'authentification par mot de passe ssh. Quand je lance le script dans SunOS, je trouve que le processus ssh engendré est tué une fois que le script ci-dessous est terminé. Ce n'est pas le cas sous Linux. Comment pouvons-nous l'éviter? Devrions-nous ignorer le signal SIGCHLD d'une manière ou d'une autre? Y at-il de toute façon à déterminer grâce à ce script si le processus généré est réussi et signaler une erreur le cas échéant?expect commande - Unix

#!/usr/local/bin/expect -f 

set password blah-blah 
spawn ssh -NfL 8002:<test domain>:22 [email protected] 
expect "* password:*" 
send -- "$password\r" 
send -- "\r" 
expect EOF 

-Karthik

+0

Des pointeurs à cette question? – Kartlee

Répondre

1

Si vous utilisez des clés ssh, vous aurez pas besoin de coder les mots de passe dans les scripts shell.

Vous pouvez même crypter la clé avec un mot de passe, et utiliser ssh-agent pour gérer la clé pour vous - vous déverrouillez votre clé le matin, démarrez votre tunnel, puis oubliez votre clé lorsque vous partez déjeuner, déverrouillez votre clé dans l'après-midi, et l'oublier encore quand vous rentrez chez vous la nuit. Pas de passerelle magique sur disque vers des machines distantes.

+0

Merci pour le conseil. Mais je ne pense pas que cela réponde à ma question principale. Je cherche une façon de demander de ne pas tuer le processus engendré. – Kartlee

+0

C'est la meilleure solution - les clés ssh sont le meilleur moyen de gérer les connexions automatisées. –

+0

@Kartlee, en effet, je ne sais pas attendre bien, je ne l'ai pas utilisé depuis des années. (Pour ce même problème, jusqu'à ce qu'un collègue me dise d'utiliser ssh-keys.) – sarnold

1

Au lieu de mettre la commande ssh en arrière-plan, vous pouvez mettre le script expect dans l'arrière-plan:

#!/usr/local/bin/expect -f 

if {[fork] != 0} exit 
disconnect 

set password blah-blah 
spawn ssh -NL 8002:localhost:22 [email protected] 
expect { 
    EOF {exit 1} 
    "assword:" {} 
} 
send -- "$password\n" 
send -- "\n" 
expect EOF 
wait 

Works pour moi sur Linux. Au moins pour la phase d'installation, l'arrêter est plus difficile. J'ai dû kill -9 pour arrêter le script attendu. Ce qui nécessite probablement de tuer le processus ssh aussi.

+0

Le script original fonctionne bien sous Linux. Je vois une différence seulement dans SunOS. De plus, la suggestion que vous avez faite ne semble pas fonctionner. – Kartlee

+0

Est-ce que cela fonctionne pour vous dans SunOS? – Kartlee

+0

La solution de Douglas fonctionne bien pour Solaris. – jlliagre

Questions connexes