使用下面的shell代码远程Telnet请求:如何从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 $?
但它总是返回“1”,即使telnet连接正常。
使用下面的shell代码远程Telnet请求:如何从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 $?
但它总是返回“1”,即使telnet连接正常。
以这种方式编写Telnet特别困难,与建立连接和完成预期操作所花费的时间存在高度的异步性。 expect就是为这种目的而创建的。你启动一个程序,比如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是一个更好的选择,并支持可以运行(通过.ssh/authorized_keys)更好的身份验证选项(例如:public/private key auth),restrictions for commands。使用ssh,并设置SSH密钥,你的脚本减少到一个shell命令:
ssh [email protected] 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
使用'期待(1)'脚本互动节目。 –
我第二个这个。 Expect对于自动执行交互式任务非常有用。 –