我正在尝试通过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
请帮我解决这个问题。 谢谢。
答案 0 :(得分:0)
首先,确保已安装ssh。从bash提示符(Mac,Linux,Cygwin)或cmd提示符(Windows)中,键入:
ssh
如果您看到错误,请尝试修复它。最可能的原因是ssh没有安装,或者没有安装在路径中。
接下来,在您的脚本中,您没有使用$user
变量,而是使用硬编码的root
。修复:
spawn ssh $user@$DeviceIp
最后一个问题:你已经从命令行指定了用户名,ssh程序不再要求用户,所以你必须删除这两行:
expect "login as:"
send "$user\r"
之后,希望一切都按计划进行。