如何使用 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"

第一行是确保出现远程服务器上的提示。

此外,因为您在过程中 spawning,所以 spawn_id 变量将具有 local 作用域。如果您打算将连接封装在过程中,但能够在过程外部使用派生的过程,则需要将 global spawn_id 添加到过程主体。