我有一个 bash 脚本,它使用 rsync 将文件从两个远程工作站(unix 和 linux)备份到本地硬盘。我希望脚本在运行 rsync 之前检查工作站是否在线。我能想到的最简单的方法是使用 ping:
ping -s 1 -c 1 $SERVN > /dev/null; echo $?
这对于一个工作站来说很好,但出于安全原因,另一个工作站上的 ping 被禁用。我试过 nc,但它也不起作用。我还尝试使用 ssh 或 rsync “ping” 机器,但当然我得到了密码提示,这有点违背了这样做的目的。有人有什么建议/想法吗?谢谢
答案1
nc -z $REMOTESERVER 22
echo $?
如果您使用 SSH 执行 rsync,则该端口应该是打开的。
答案2
ssh $REMOTESERVER -o PasswordAuthentication=no
这应该尝试通过 SSH 连接,但不会提示输入密码,因为该方法已被选项禁用。
警告:此连接尝试可能被视为“登录失败”,并且您可能会将自己锁定在外,例如如果您使用 DenyHosts。
答案3
hping $REMOTESERVER -S -p 22 -c 2 >/dev/null 2>&1; echo $?