如何检查远程计算机是否在线以进行ssh /脚本访问?


12

我正在编写一个脚本,该脚本会将笔记本电脑中的数据备份到Ubuntu服务器。为此,我正在寻找(ba)sh命令以在开始备份之前测试服务器是否可用。类似于ping在端口22上返回布尔值的东西。

我怎样才能做到这一点?

Answers:


21

像这样:

nc -z hostname 22 > /dev/null
echo $?

如果可以的0话,就可以使用。如果是,1那不是。


请注意,此选项仅适用于netcat-openbsd软件包,否则该选项不存在:nc: invalid option -- 'z'
valentin_nasta

没有-w选项nc将永远停留在Ubuntu上
Edward Torvalds

我们可以从Windows类似的命令
Harshal的Zope

13

使用netcat

nc -z localhost 22

从联机帮助页

 -z      Specifies that nc should just scan for listening daemons,
         without sending any data to them.

该死的!你击败了我。
bahamat 2011年

2
谢谢,不知道nc,我想知道为什么nc -z -w 2 192.168.0.123(-w是超时选项,以秒为单位)不超时:|
Amo__

您还需要指定一个端口。nc -z -w 2 192.168.0.123 22可以正常工作。
克里斯,

+1为z进。无论您扫描的是谁,只要不提供identification string
amrx

5

备用:

nc -vzw 1 hostname 22

应该选择答案,没有任何-w选择,nc它将永远停留在Ubuntu上
Edward Torvalds

布尔可以像=>一样使用nc -zw 2 examplehost.com 22 && { echo "You can call your backup function" ; } || { echo "SSH Unavailable" ; }
Mr. Pundir '19

3

关于什么

MACHINE=192.168.0.8
exec 3>/dev/tcp/${MACHINE}/22
if [ $? -eq 0 ]
then
    echo "SSH up"
else
    echo "SSH down"
fi

不要总是假设它是Linux。他的笔记本电脑可能是Mac。并且Debian禁用/dev/tcp。Ubuntu也可能是Debian派生的(但是我没有具体知识)。但是,如果/dev/tcp有的话,那是完全正确的。
bahamat 2011年

谢谢您的反馈,我已经在Mac上编写了它。

谢谢,即使exec 3>/dev/tcp/${HOST}/22看起来真的很“怪异”
Amo__

这是不需要安装其他软件包的唯一答案。
Chen A.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.