2010-09-17 28 views
2

lors de l'exécutionne pouvait pas en mesure de se reproduire (ssh) en utilisant attendre

$expect filename.exp user pwd ip 

Je suis l'erreur

ne pouvait pas exécuter "ip ssh utilisateur -l": tel fichier ou répertoire

Le contenu de ce filename.exp sont:

#!/opt/sfw/bin/expect -D 

set OMC_Usr [lindex $argv 0] 
set OMC_Pwd [lindex $argv 1] 
set OMC_IP [lindex $argv 2] 

set cmd "ssh -l $OMC_Usr $OMC_IP" 
spawn $cmd 
expect "Password:" 
send "$OMC_Pwd\r" 
interact 

aide-moi à procéder
Merci ...

Répondre

3

Le problème est que spawn a besoin de la commande et ses arguments qui lui sont passés comme plusieurs arguments Tcl, comme la commande standard Tcl exec. La solution est de le faire directement:

spawn ssh -l $OMC_Usr $OMC_IP 

Ou, si vous préférez (et vous avez Tcl 8.5):

set cmd "ssh -l $OMC_Usr $OMC_IP" 
spawn {*}$cmd 

Ou, si vous avez 8,4 ou avant:

eval spawn [lrange $cmd 0 end] 

Mais ne pas faire ceci:

eval spawn $cmd 

parce que cela va se casser de façon inattendue si vous avez un métacaractère Tcl dans le nom d'utilisateur (ou l'adresse IP, mais c'est très peu probable).


Bien sûr, le vrai solution est de mettre en place une paire de clés RSA et utiliser ssh-agent pour le gérer. Comme ça, vous n'aurez pas besoin de passer des mots de passe sur une ligne de commande; c'est important parce que la ligne de commande d'un processus est une information publique sur le processus. Vraiment. Vous pouvez le trouver avec quelque chose de trivial comme ps -efww (ou l'équivalent pour votre système d'exploitation). Les variables d'environnement sont tout aussi insécurisées; il y a une option à ps pour les montrer aussi.

+0

merci 1000 fois .. je l'ai fait – John