3

我有一个在远程 Linux 主机上运行的基于文本的菜单。我正在使用期望 ssh 进入该主机,并想弄清楚如何与菜单交互。交互包括向上、向下箭头以及使用回车键和回车键。例如,

Disconnect
Data Collection >
Utilities >
Save Changes

当您进入系统时,断开连接被突出显示。因此,只需按两次 enter 即可断开与系统的连接。第二次进入确认断开连接。

以下代码将 ssh 进入我的系统并调出菜单。如果我删除期望 eof 并尝试发送“\r”,认为这会选择“断开连接”菜单选项,我会收到以下错误:“write() 无法写入任何内容 - 将 sleep(1) 并重试...”

#!/usr/bin/expect
set env(TERM) vt100

set password abc123
set ipaddr 162.116.11.100

set timeout -1
match_max -d 100000

spawn ssh root@$ipaddr
exp_internal 1
expect "*password:*"

send -- "$password\r"
expect "Last login: *\r"

expect eof

我查看了 virterm 和 term_expect 示例,但无法弄清楚如何调整它们以适合我。如果有人能指出我正确的方向,我将不胜感激。我需要知道的是我可以与基于文本的菜单系统进行交互吗?这样做的正确方法是什么,如果有的话,例子会很棒。

谢谢,-里根

4

3 回答 3

1

为了简化你的生活,你可能想要设置公钥加密,这样你就可以在不使用密码的情况下通过 ssh 连接到远程主机。然后您可以专注于测试您的软件而不是 ssh。谷歌“ssh login without password”了解更多信息。您将找到的说明是直截了当的,所以不要害怕。

于 2010-03-22T05:32:32.230 回答
1

Try using the autoexpect tool to record an interactive session, and see what the codes look like.

于 2010-03-17T13:07:48.840 回答
0

你试过\n\n\r吗?

于 2010-04-23T20:29:13.203 回答