Проблема в том, что spawn
нужна команда и ее аргументы передаются ей в виде нескольких аргументов Tcl, как и стандартная команда Tcl exec
. Исправление заключается в том, чтобы сделать это напрямую:
spawn ssh -l $OMC_Usr $OMC_IP
Или, если вы предпочитаете (и у вас есть Tcl 8.5):
set cmd "ssh -l $OMC_Usr $OMC_IP"
spawn {*}$cmd
Или, если у вас 8.4 или раньше:
eval spawn [lrange $cmd 0 end]
Но не сделать это:
eval spawn $cmd
потому что это неожиданно оборвется, если в имени пользователя (или IP-адресе есть метасимвол Tcl), но это маловероятно).
Конечно, исправление real заключается в настройке пары ключей RSA и использовании ssh-agent
для управления ею. Таким образом, вам не нужно будет передавать пароли в любой командной строке; это важно, потому что командная строка процесса является общедоступной информацией о процессе. В самом деле. Вы можете найти это с помощью чего-то тривиального, например ps -efww
(или эквивалент для вашей ОС). Переменные окружения также небезопасны; есть возможность ps
, чтобы показать их тоже.