无法在ActiveTCL中使用TCL expect生成ssh
我正试图通过ActiveState tcl'Tcsh'窗口中的.tcl脚本进行ssh。 拥有WINDOWS操作系统无法在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
#!/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操作系统运行。