如何在不实际尝试登录的情况下检查 SSH 服务器是否正在侦听主机
How can I check to see if an SSH server is listening on a host without actually attempting a login
我正在尝试制作一个 bash 脚本来检查主机是否存在,如果 SSH 服务器正在侦听主机,则尝试通过 ssh 进入该主机。如果 SSH 服务器未侦听,该命令将默认为 telnet。
最好的方法是什么?我正在考虑使用类似 ssh-keyscan 的东西来从 ssh 服务器获取 public 密钥,但是 ssh-keyscan 不在这个 jumpserver 上。 Nmap 也不在此服务器上。我无法将这些二进制文件复制到跳转服务器上,也无法 compile/build 跳转服务器上的任何内容。
检查 SSH 服务器的最佳方法是什么?我认为 expect 可能会起作用,但我想尽可能避免使用它。
您可以编写一个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
如果您的 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
才能正常工作。
我喜欢oneliners :)
if nc "server" "port" </dev/null >/dev/null 2>&1;then echo yeah;else echo no;fi
适用于我的路由器和 rpi
我正在尝试制作一个 bash 脚本来检查主机是否存在,如果 SSH 服务器正在侦听主机,则尝试通过 ssh 进入该主机。如果 SSH 服务器未侦听,该命令将默认为 telnet。
最好的方法是什么?我正在考虑使用类似 ssh-keyscan 的东西来从 ssh 服务器获取 public 密钥,但是 ssh-keyscan 不在这个 jumpserver 上。 Nmap 也不在此服务器上。我无法将这些二进制文件复制到跳转服务器上,也无法 compile/build 跳转服务器上的任何内容。
检查 SSH 服务器的最佳方法是什么?我认为 expect 可能会起作用,但我想尽可能避免使用它。
您可以编写一个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
如果您的 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
才能正常工作。
我喜欢oneliners :)
if nc "server" "port" </dev/null >/dev/null 2>&1;then echo yeah;else echo no;fi
适用于我的路由器和 rpi