我正在尝试编写一个脚本,将更多服务器作为运行状况检查或安全性测试.我不需要通过SSH实际运行任何东西.
我们有一些运行的服务器,出于安全考虑,我们并不总是允许SSH,我希望有一个我可以运行的脚本来确认哪些是可访问的,哪些不是.
我意识到StackExchange充满了这些问题,所以我很快就找到了这个建议:
$ ssh -q user@downhost exit $ echo $? 255 $ ssh -q user@uphost exit $ echo $? 0
基本上,255
只要连接不可能,它就会返回,但这里是我遇到问题的地方.我们的服务器需要密钥文件和用户/密码验证.
有BatchMode=yes
我有机会测试了罚款,如果我没有密码限制为好.
我可以给脚本文件的位置,没有问题.但我255
每次都会得到,因为服务器需要密码,这可以在这个答案中看到.
基本上我的问题是:
是否有可能编写一个脚本,让我知道是否可以通过SSH连接到这些服务器(考虑到我的约束),如果它是什么样子?
我不需要最终的脚本作为答案(虽然这是更可取的).只是在正确的方向上的一些指示将帮助我很多.
谢谢!
你可以用netcat
.
如果您只是对端口打开感兴趣,可以使用:
if nc -w 5 -z "$server" 22 ; then echo "Port 22 on $server is open" fi
如果您对该端口上实际运行的ssh守护程序感兴趣,您可以分析服务器的hello消息:
if [[ $(nc -w 5 "$server" 22 <<< "\0" ) =~ "OpenSSH" ]] ; then echo "open ssh is running" fi
顺便说一句,使用该选项-w
可以指定连接超时(以秒为单位).我为这个例子选择了5秒