【问题标题】:unable to spawn ssh using TCL expect in ActiveTCL无法在 ActiveTCL 中使用 TCL 生成 ssh
【发布时间】:2015-05-08 11:14:25
【问题描述】:

我正在尝试通过 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    

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

【问题讨论】:

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

标签: ssh tcl


【解决方案1】:

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

ssh

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

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

spawn ssh $user@$DeviceIp

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

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

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

【讨论】:

    猜你喜欢
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 2020-08-24
    • 2018-07-06
    • 2020-11-10
    • 2021-09-10
    相关资源
    最近更新 更多