从shell脚本生成交互式telnet会话

Mur*_*iar 11 bash telnet

我正在尝试编写脚本以允许我登录到控制台服务器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会话自动关闭?

Dav*_*ebb 7

您需要将终端输入重定向到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)


use*_*323 5

我认为你应该看看期待计划.它出现在所有现代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