首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在ActiveTCL中使用TCL expect生成ssh

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

Stack Overflow用户
提问于 2015-05-08 19:14:26
回答 1查看 1.4K关注 0票数 1

我正在尝试通过ActiveState TCL 'tclsh‘窗口中的.tcl脚本进行ssh。有WINDOWS操作系统。

代码语言:javascript
复制
#!/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)中执行时,我看到以下错误

代码语言:javascript
复制
% 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    

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

EN

回答 1

Stack Overflow用户

发布于 2015-05-10 13:49:31

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

代码语言:javascript
复制
ssh

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

接下来,在脚本中,您没有使用$user变量,而是使用了硬编码的root。解决这个问题:

代码语言:javascript
复制
spawn ssh $user@$DeviceIp

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

代码语言:javascript
复制
expect "login as:"    
send "$user\r"    

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30122449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档