我最近更换了家用路由器和宽带(换成了 BT Infinity),我发现我的 SSH 服务器变得相当不可靠。当然,我已将 SSH 设置为转发到新路由器上的正确主机,这肯定是真的,因为我有时可以远程连接到它,但有时却不能。
我有一台 dedi,希望编写一个脚本,偶尔会“ping” SSH 服务器,以测试它是否正常运行。有没有办法调用 SSH 命令,以便它只与服务器握手,不再执行其他操作,并返回一个有用的状态代码来表明服务器已启动或已关闭?这样我就可以将其添加到这样的脚本中:
#!/bin/bash
LOG_FILE="$HOME/ssh.log"
while [ true ]; do
testSSH
if [ $? -ne 0 ]; then
echo "`date +%y%m%d-%H%M%S` server down" >> $LOG_FILE
fi
sleep 60
done
或者说,制作这样的程序容易吗?
编辑:顺便说一句,如果有人对此感兴趣或了解,我已经将我的端口转发设置更改为用户定义的 IP 地址,而不是 MAC 地址(默认),以防万一,SSH 主机有一个静态 IP。并不是说我使用 MAC 欺骗,只是因为我听说它在家庭集线器上有“缺陷”。当我查看连接的设备页面时,我没有在那里看到我的电脑。我的电脑和路由器之间有交换机,但这应该没什么区别,对吧?
答案1
$ ssh -q host true
如果一切正常则返回 0,如果连接超时则返回 255。这显然只有当您确实可以登录该主机时才有效。
如果这不是一个选项,那么
$ echo "" | nc host port
如果与服务器的连接成功,则返回“协议不匹配”(返回值 0),如果连接被拒绝,则返回值 1。您还可以使用该-w
选项指定自定义超时(同样,如果连接超时,则返回值 1)。