无法在ActiveTCL中使用TCL期望生成ssh

时间:2015-05-08 11:14:26

标签: ssh tcl

我正在尝试通过ActiveState TCL“tclsh”窗口中的.tcl脚本进行ssh。 拥有WINDOWS OS系统。

#!/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 ~]#"    
}    

我在tclsh(ActiveTCL)中执行时看到以下错误

% 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    

请帮我解决这个问题。 谢谢。

1 个答案:

答案 0 :(得分:0)

首先,确保已安装ssh。从bash提示符(Mac,Linux,Cygwin)或cmd提示符(Windows)中,键入:

ssh

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

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

spawn ssh $user@$DeviceIp

最后一个问题:你已经从命令行指定了用户名,ssh程序不再要求用户,所以你必须删除这两行:

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

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