[英]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.