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.
merci 1000 fois .. je l'ai fait – John