chu*_*tsu 78 connection ssh bash
我正在创建一个bash脚本,该脚本将登录到远程计算机并创建私钥和公钥.
我的问题是远程机器不是很可靠,而且它们并不总是正常运行.我需要一个bash脚本来检查SSH连接是否已启动.在实际创建密钥以供将来使用之前.
小智 150
您可以使用返回值ssh检查这一点,为您提供:
$ ssh -q user@downhost exit
$ echo $?
255
$ ssh -q user@uphost exit
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
编辑:另一种方法是使用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)
Run Code Online (Sandbox Code Playgroud)
但是你必须grep消息(nmap不使用返回值来显示端口是否被过滤,关闭或打开).
EDIT2:
如果您对ssh-port的实际状态感兴趣,可以grep open用egrep 'open|closed|filtered'以下代码替换:
$ nmap host -PN -p ssh | egrep 'open|closed|filtered'
Run Code Online (Sandbox Code Playgroud)
只是为了完整.
小智 21
ssh -q -o "BatchMode=yes" -i /home/sicmapp/.ssh/id_rsa <ID>@<Servername>.<domain> "echo 2>&1" && echo $host SSH_OK || echo $host SSH_NOK
Run Code Online (Sandbox Code Playgroud)
小智 16
你可以使用这样的东西
$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@host echo ok 2>&1)
Run Code Online (Sandbox Code Playgroud)
如果ssh连接正常,这将输出"ok"
iar*_*oyo 10
补充@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
Run Code Online (Sandbox Code Playgroud)
小智 7
尝试:
echo quit | telnet IP 22 2>/dev/null | grep Connected
Run Code Online (Sandbox Code Playgroud)
下面的ssh命令应该有0一个成功连接的退出代码,否则为非零值。
ssh -q -o BatchMode=yes user@remote.com exit
if [ $? != "0" ]; then
echo "Connection failed"
fi
Run Code Online (Sandbox Code Playgroud)