【发布时间】:2014-11-02 05:25:41
【问题描述】:
我正在尝试在 Debian 中自动执行 telnet 会话,但在发送命令时遇到了困难。
通过查看here,我很清楚自己需要做什么。
spawn telnet localhost
expect "login:"
send "test\n"
expect "Password:"
send "password\n"
sleep 10 //Time for the connection to be established
send "ls\n"
运行脚本,它正确输入了用户名。它进入了密码字段,我假设它输入了它(尽管我不能确定,因为输入时密码在 Debian 中是空白的)。它停止等待,然后将我带回我的帐户(root)。它从未连接到“测试”。
修改我的代码,使其更像我的参考:
spawn telnet localhost
expect "login:"
send "test\n"
expect "Password:"
send "password\n"
interact
这导致它立即登录并连接到我的“测试”帐户。 从这里我尝试在使用发送、回显和输入命令进行交互后添加命令。在我退出 telnet 会话之前什么都不会发生,然后我会收到此错误。
发送:
send: spawn id exp6 not open
while executing
"send "ls\n""
(file ".telnet.sh" line 8)
对于回声:
invalid command name "echo"
while executing
"echo "ls\n""
(file ".telnet.sh" line 8)
只有命令名称“ls” 无效的命令名称“ls” 在执行时 “ls” (文件“.telnet.sh”第 8 行)
我意识到交互将控制权交还给用户,但出于某种原因,这是让我真正连接到帐户的唯一方式。
有谁知道为什么没有交互就无法连接?如果没有,为什么我不能在 telnet 会话结束之前发送这些命令?
编辑 经过一番研究,我发现了这个link,它最终解决了一个期望脚本在一切完成后立即结束,关闭远程登录会话。他们说他们通过添加一个expect“$”来解决这个问题,让脚本知道更多的命令正在被发送。我尝试像网站建议的那样使用“$”符号,但它又一次踢了我。所以我尝试了这个。
这是我更新的代码:
#!/usr/bin/expect
spawn telnet localhost
expect "debian login"
send "test\n"
expect "Password:"
send "password\n"
expect "test@debian:~$"
send "ls\n"
现在我仍在 telnet 会话中大约 10 秒钟,然后它就把我踢走了。如果我尝试在那个时间输入命令,它会暂停一段时间,然后在 telnet 会话关闭后运行我输入的命令。
正在取得进展。缓慢但肯定地。
【问题讨论】: