我正在尝试编写脚本以允许我登录到控制台服务器48端口,以便我可以快速确定连接到每个串行线路的设备.
本质上我希望能够有一个脚本,给定一个主机/端口列表,telnet到列表中的第一个设备,并让我处于交互模式,以便我可以登录并确认设备,然后当我关闭telnet会话,连接到列表中的下一个会话.
我面临的问题是,如果我从可执行的bash脚本中启动telnet会话,会话立即终止,而不是等待输入.
例如,给出以下代码:
$ cat ./telnetTest.sh
#!/bin/bash
while read line
do
telnet $line
done
$
Run Code Online (Sandbox Code Playgroud)
当我运行命令'echo"hostname"| testscript.sh'我收到以下输出:
$ echo "testhost" | ./telnetTest.sh
Trying 192.168.1.1...
Connected to testhost (192.168.1.1).
Escape character is '^]'.
Connection closed by foreign host.
$
Run Code Online (Sandbox Code Playgroud)
有谁知道一种方法来阻止telnet会话自动关闭?
您需要将终端输入重定向到telnet进程.这应该是/dev/tty.所以你的脚本看起来像:
#!/bin/bash
for HOST in `cat`
do
echo Connecting to $HOST...
telnet $HOST </dev/tty
done
Run Code Online (Sandbox Code Playgroud)
我认为你应该看看期待计划.它出现在所有现代Linux发行版中.这是一些exmaple脚本:
#!/usr/bin/expect -f
spawn telnet $host_name
expect {
"T0>" {}
-re "Connection refused|No route to host|Invalid argument|lookup failure"
{send_user "\r******* connection error, bye.\n";exit}
default {send_user "\r******* connection error (telnet timeout),
bye.\n";exit}
}
send "command\n"
expect -timeout 1 "something"
Run Code Online (Sandbox Code Playgroud)
spawn命令启动远程登录程序(telnet,ssh,netcat等)
exxt命令用于...... hm ..期待来自远程会话的东西
发送 - 发送命令
send_user - 将注释打印到stdout