Linux 如何使用expect继续在SSH服务器上输入命令

Linux 如何使用expect继续在SSH服务器上输入命令,linux,ssh,tcl,expect,Linux,Ssh,Tcl,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} {

我正在使用
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
,因此
spawn\u id
变量将具有本地作用域。如果您打算将连接封装在进程内部,但能够在进程外部处理生成的进程,则需要将
全局生成id
添加到进程正文中。

我有新问题,也许您可以帮助我-