繁体   English   中英

如何从Shell脚本获取telnet执行结果代码?

[英]How to get telnet execution result code from shell script?

使用以下shell代码进行远程telnet请求:

{
sleep 5
echo admin
sleep 3
echo pass
sleep 3
echo ls
sleep 5
echo exit
} | telnet 172.16.1.1

我想检查telnet连接是否成功。 尝试使用$ ?:

echo $?

但是即使telnet连接正常,它也始终返回“ 1”。

Telnet很难以这种方式编写脚本,建立连接所花费的时间与完成预期的操作之间存在高度的异步性。 期待了整整这种目的的创建。 您启动一个程序(例如telnet),然后声明一系列期望值-例如,当从程序中发出'username:'时,以及要触发的操作(例如:输入用户名)。

也有许多语言可以期望的库或包装器:

这是驱动telnet发出HTTP HEAD请求的示例:

set timeout 20

spawn telnet localhost 80

expect "Connected to "
send "HEAD / HTTP/1.0\r\n\r\n"

expect "HTTP 200 OK"

考虑到所有这些,我觉得我必须指出telnet被认为是不安全的。 Ssh是更好的选择,并且支持更好的身份验证选择(例如: public / private key auth ), 可运行命令的限制 (通过.ssh / authorized_keys)。 使用ssh和ssh-keys设置后,您的脚本将简化为单个shell命令:

ssh user@hostname ls

ssh对安全,安全的远程命令执行提供了强大的支持。

如果我没有记错的话,这个期望脚本可以完成上面的操作。

#!/usr/bin/expect

spawn telnet 172.16.1.1

expect username:
send admin
expect password:
send pass
expect "\$ "
send ls
expect "\$ "
send exit

这是入门的有用链接: http : //oreilly.com/catalog/expect/chapter/ch03.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM