如何使用 expect 继续在 SSH 服务器上输入命令
How to continue entering commands on SSH-server, using expect
我正在使用 expect
连接到我的 SSH 服务器:
#!/bin/expect
set command [lindex $argv 0]
set command_connect "connect"
proc connect {} {
spawn ssh username@192.168.1.101
expect "password"
send "password\r"
interact
}
if {$command == $command_connect} {
connect
}
一切正常,我可以连接到服务器,但我无法输入命令!不知何故,所有命令都进入了我的电脑!如果我尝试清除屏幕:
proc connect {} {
spawn ssh username@192.168.1.101
expect "password"
send "password\r"
spawn clear
interact
}
然后我清空我的电脑屏幕并断开 SSH 连接(我返回到我的控制台)!
为什么会发生这种情况以及如何继续在 SSH 服务器上输入命令?
如果要向远程服务器发送命令,则需要通过生成的 SSH 进程发送它们:
expect "$"
send "clear\r"
第一行是确保出现远程服务器上的提示。
此外,因为您在过程中 spawn
ing,所以 spawn_id
变量将具有 local 作用域。如果您打算将连接封装在过程中,但能够在过程外部使用派生的过程,则需要将 global spawn_id
添加到过程主体。
我正在使用 expect
连接到我的 SSH 服务器:
#!/bin/expect
set command [lindex $argv 0]
set command_connect "connect"
proc connect {} {
spawn ssh username@192.168.1.101
expect "password"
send "password\r"
interact
}
if {$command == $command_connect} {
connect
}
一切正常,我可以连接到服务器,但我无法输入命令!不知何故,所有命令都进入了我的电脑!如果我尝试清除屏幕:
proc connect {} {
spawn ssh username@192.168.1.101
expect "password"
send "password\r"
spawn clear
interact
}
然后我清空我的电脑屏幕并断开 SSH 连接(我返回到我的控制台)!
为什么会发生这种情况以及如何继续在 SSH 服务器上输入命令?
如果要向远程服务器发送命令,则需要通过生成的 SSH 进程发送它们:
expect "$"
send "clear\r"
第一行是确保出现远程服务器上的提示。
此外,因为您在过程中 spawn
ing,所以 spawn_id
变量将具有 local 作用域。如果您打算将连接封装在过程中,但能够在过程外部使用派生的过程,则需要将 global spawn_id
添加到过程主体。