我正在创建一个bash脚本,该脚本将登录到远程计算机并创建私钥和公钥.
我的问题是远程机器不是很可靠,而且它们并不总是正常运行.我需要一个bash脚本来检查SSH连接是否已启动.在实际创建密钥以供将来使用之前.
您可以使用返回值ssh检查这一点,为您提供:
$ ssh -q user@downhost exit $ echo $? 255 $ ssh -q user@uphost exit $ echo $? 0
编辑:另一种方法是使用nmap(你不需要有密钥或登录的东西):
$ a=`nmap uphost -PN -p ssh | grep open` $ b=`nmap downhost -PN -p ssh | grep open` $ echo $a 22/tcp open ssh $ echo $b (empty string)
但是你必须grep消息(nmap不使用返回值来显示端口是否被过滤,关闭或打开).
EDIT2:
如果您对ssh-port的实际状态感兴趣,可以grep open
用egrep 'open|closed|filtered'
以下代码替换:
$ nmap host -PN -p ssh | egrep 'open|closed|filtered'
只是为了完整.
ssh -q -o "BatchMode=yes" -i /home/sicmapp/.ssh/id_rsa@ . "echo 2>&1" && echo $host SSH_OK || echo $host SSH_NOK
你可以使用这样的东西
$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@host echo ok 2>&1)
如果ssh连接正常,这将输出"ok"
补充@Adrià Cidre
你的回应可以做到:
status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@host echo ok 2>&1) if [[ $status == ok ]] ; then echo auth ok, do something elif [[ $status == "Permission denied"* ]] ; then echo no_auth else echo other_error fi