telnet 后无法发送 root 和密码。为什么?
telnet board
sleep 3
echo -e "root\n"
sleep 1
echo -e "labrat\n"
答案1
您不能使用“简单”的 bash 脚本与telnet
会话进行交互。
根据@Melebius 的评论,答案在 StackOverflow 上回答这个问题提出一些解决方案,例如使用预计。作为更简单的替代方法,您可以通过管道发送命令到 telnet
:
{ sleep 3 ; echo "root" ; sleep 1 ; echo "labrat" ; sleep 1; } | telnet board
请记住,这样 telnet 会话在输入处理后很快就会终止。如果你想创建一个自动化脚本,它可能就足够了(但expect
仍然是更好的方法)。
根据评论进行编辑
如果你想打开一个交互的 telnet
会话,但省去了每次输入用户名和密码的“麻烦”,恐怕没有简单的解决方案。您可以通过标志-l
(即telnet -l root board
)传递用户名,因此您只需输入密码。
看起来expect
可以成功用于自动化 telnet 登录,同时通过interact
指令留下交互式提示。
一个简单的例子是:
#!/usr/bin/expect
spawn telnet board
sleep .3;
expect "login:"
send "root\r"
expect "password:"
send "labrat\r";
interact
只需根据您的需要进行编辑即可。
答案2
我不确定这是否是问题的原因(我自己从未使用过 telnet),但echo
在打印时已经添加了换行符,因此echo -e "root\n"
将打印root
两个换行符。您可能只需要一个,因此请使用echo "root"
或printf 'root\n'
。