通过 ssh 和 telnet 测试从不同主机到一台特定主机的网络连接

通过 ssh 和 telnet 测试从不同主机到一台特定主机的网络连接

我试图查看是否为主机名/IP 列表打开了一个端口,并且我使用了一个像这样的简单脚本来 ssh 到每个主机并捕获输出。

for i in `cat $1`
do ssh $i "sleep 5 | telnet 11.22.33.44 123"
done

这会引发“没有特定于环境的终端时间”错误,因为 Telnet 被设计为与智能终端交互的交互工具。

nc我知道我无法使用命令,因为它在 Unix AIX 系统上不可用,我该如何解决这个问题?

请注意,一些主机会回复 和Connected to 11.22.33.44. Escape character is ^],这意味着有连接,而其他主机会冻结在Trying ...这意味着没有连接。

答案1

由于默认安装了 perl,一种方法是通过 ssh 到中间主机并要求其运行 perl,并在此处文档中提供 perl 程序:

for host in $(< "$1")
do

  ssh "$host" perl << 'EOF'
use IO::Socket;
my $handle = IO::Socket::INET->new(
        PeerAddr => '11.22.33.44',
        PeerPort => 123,
        Proto    => 'tcp',
        Timeout  => 5)
    or die "Failed\n";
close $handle;
print "Success\n";
EOF

done

该脚本尝试通过 TCP 连接到给定的 IP 和端口;如果失败,您将收到Failed消息,但如果成功,它会立即关闭连接并打印Success.这使用$(< ...)语法从第一个参数给出的文件名中读取;就像 一样cat,此方案假设所有文件名中都不包含任何字符$IFS(默认情况下为空格、制表符或换行符)。我还引用了循环变量(此处为host),以防止任何输入文件内容包含 shell 通配字符(如*?或 )时出现问题[

相关内容