如何从 bash 获取 telnet 命令的输出?
Posted
技术标签:
【中文标题】如何从 bash 获取 telnet 命令的输出?【英文标题】:How to get the output of a telnet command from bash? 【发布时间】:2016-04-30 19:13:29 【问题描述】:我正在尝试从 Linux 获取在我的 Windows 机器上运行的进程列表,但是当我在脚本中执行此操作时没有得到任何输出。如果我手动使用 telnet 并使用命令 pslist 我会得到完整的进程列表,但不在我的脚本中。
这是 bash 脚本(减去变量):
( echo open $host
sleep 1
echo $user
sleep 3
echo $pass
sleep 1
echo pslist
sleep 2
) | telnet
我只是用bash pslist.sh
调用它,输出是这样的:
telnet> Trying ip_address...
Connected to ip_address.
Escape character is '^]'.
Welcome to Microsoft Telnet Service
login: my_loginmy_passwordpslistConnection closed by foreign host.
我做错了什么?
【问题讨论】:
尝试使用 \r 字符终止每个echo
,如下所示:`echo -e "$user\r"
echo 有很多可移植性问题,不应该与选项标志一起使用。请考虑使用 printf:printf 'name: %s\n' "$name"
。 wiki.bash-hackers.org/commands/builtin/echo | cfajohnson.com/shell/cus-faq.html#Q0b | in-ulm.de/~mascheck/various/echo+printf
我建议使用expect
编写telnet 脚本。您可以在这里了解并下载它:expect.sourceforge.net 这里有一个使用它的 telnet 脚本示例:***.com/questions/7789710/…
@nsilent22 谢谢,就是这样 :) 你能把它作为答案发布吗?
@BaptisteWicht:完成。
【参考方案1】:
telnet
是出了名的难以编写脚本。如果您在命令之间添加更长的 sleep
,您可能会更频繁地成功。
更好的方法是切换到可正确编写脚本的客户端,即。 netcat
(又名nc
)。更好的办法是在你的 Windows 机器上安装一个 SSH 服务器(也许为了安全起见,只能从你的网络内部访问它)并使用无密码身份验证进行设置。然后你可以简单地ssh user@ipaddress pslist
【讨论】:
【参考方案2】:用 \r 字符终止每个echo
,如下所示:echo -e "$user\r"
【讨论】:
在可移植性方面,printf
绝对优于echo
,无论是否带有-e
,以及带有或不带有在某些方言中支持但在其他方言中不支持的转义码。使用printf
,所有这些都得到了适当的标准化。以上是关于如何从 bash 获取 telnet 命令的输出?的主要内容,如果未能解决你的问题,请参考以下文章