无法在ActiveTCL中使用TCL expect生成ssh

无法在ActiveTCL中使用TCL expect生成ssh,ssh,tcl,Ssh,Tcl,我正试图通过ActiveState tcl'Tcsh'窗口中的.tcl脚本进行ssh。 拥有WINDOWS操作系统 #!/bin/sh # \ exec tclsh "$0" ${1+"$@"} package require Expect set user [lindex $argv 0] set password [lindex $argv 1] set DeviceIpAddr [lindex $argv 2] set DeviceHos

我正试图通过ActiveState tcl'Tcsh'窗口中的.tcl脚本进行ssh。 拥有WINDOWS操作系统

#!/bin/sh    
# \    
exec tclsh "$0" ${1+"$@"}    
package require Expect


set user [lindex $argv 0]    
set password [lindex $argv 1]    
set DeviceIpAddr [lindex $argv 2]    
set DeviceHostName [lindex $argv 3]    

foreach DeviceIp $DeviceIpAddr HostName $DeviceHostName {    

    spawn ssh $DeviceIp     
     expect "login as:"    

    send "$user\r"    
    expect "Password:"    

    send "$password\r"    
    expect "$HostName ~]#"    
}    
在tclshActiveTCL中执行时,我看到以下错误

% tclsh Test.tcl root 321 17.250.217.151 lb02va    
The system cannot find the file specified.         
    while executing    
"spawn ssh  root@$DeviceIp"       
    ("foreach" body line 3)  
    invoked from within    
"foreach DeviceIp $DeviceIpAddr HostName $DeviceHostName {     

        spawn ssh  root@$DeviceIp           
        expect "login as:"     

        send "$user\r"    
        expect "Password:"     

        send..."    
    (file "Test.tcl" line 12)    
child process exited abnormally    
请帮助我解决这个问题。
谢谢。

首先,确保已安装ssh。在Mac、Linux、Cygwin或cmd提示符窗口的bash提示符中,键入:

ssh
如果您看到错误,请尝试修复它。最可能的原因是ssh未安装,或路径中未安装

接下来,在脚本中,您没有使用$user变量,而是使用硬编码的根。修正如下:

spawn ssh $user@$DeviceIp
最后一个问题:您已经从命令行指定了用户名,ssh程序将不会再次请求用户,因此必须删除这两行:

expect "login as:"    
send "$user\r"    

在那之后,希望一切都能按计划进行。

这是什么操作系统?ssh程序安装在哪里?您的命令路径是什么?换句话说,PATH环境变量的值是多少?请编辑您的问题以包含此信息。我认为错误消息表明spawn未能生成ssh,因为操作系统未能在当前用户的PATH环境变量中列出的目录中找到名为ssh的程序-正如@Kenster所说的。因此,首先要尝试的是在运行tclsh二进制文件的同时运行ssh——它不起作用,问题与Tcl无关,而是与操作系统的基本知识有关。如何查找/设置PATH环境变量的值?我正在尝试从WINDOWS操作系统运行。