如何在没有实际尝试登录的情况下检查SSH服务器是否正在侦听主机

时间:2015-04-17 20:17:41

标签: linux bash shell ssh

我正在尝试创建一个bash脚本来检查主机是否存在,然后在SSH服务器正在侦听主机时尝试ssh到它。如果SSH服务器没有监听,该命令将默认为telnet。

最好的方法是什么?我正在考虑使用ssh-keyscan之类的东西来从ssh服务器获取公钥,但是ssh-keyscan不在这个jumpserver上。 Nmap也不在此服务器上。我无法将这些二进制文件复制到跳转服务器上,也无法在跳转服务器上编译/构建任何内容。

检查SSH服务器的最佳方法是什么?我认为期望可能有效,但我想尽可能避免使用它。

3 个答案:

答案 0 :(得分:3)

如果您的bash具有必要的(/dev/tcp)扩展名,请检查您的连接能力;这不需要任何外部命令:

if (exec 2>/dev/null 4>/dev/tcp/"$hostname"/22); then
  echo "port is open"
else
  echo "unable to connect"
fi

请注意,您的脚本需要以#!/bin/bash开头,而不是#!/bin/sh,以实现此目的。

答案 1 :(得分:2)

您可以编写shell脚本并使用telnet命令查找远程端口状态

[root@box ~]# telnet remote.example.com 22
Trying 192.168.100.1...
Connected to remote.example.com.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.3

示例脚本:

TELNET=`echo "quit" | telnet $SERVER $PORT | grep "Escape character is"`
if [ "$?" -ne 0 ]; then
  echo "Connection to $SERVER on port $PORT failed"
  exit 1
else
  echo "Connection to $SERVER on port $PORT succeeded"
  exit 0
fi

答案 2 :(得分:0)

我爱oneliners:)

build

可在我的路由器和rpi上工作