当前位置:  开发笔记 > 编程语言 > 正文

如何创建bash脚本来检查SSH连接?

如何解决《如何创建bash脚本来检查SSH连接?》经验,为你挑选了4个好方法。

我正在创建一个bash脚本,该脚本将登录到远程计算机并创建私钥和公钥.

我的问题是远程机器不是很可靠,而且它们并不总是正常运行.我需要一个bash脚本来检查SSH连接是否已启动.在实际创建密钥以供将来使用之前.



1> 小智..:

您可以使用返回值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 openegrep 'open|closed|filtered'以下代码替换:

$ nmap host -PN -p ssh | egrep 'open|closed|filtered'

只是为了完整.


很棒的答案!但是,您没有提到尝试将ssh`转换为down主机仅在例如60秒的超时后失败 - 这可能对某些用法来说是禁止的.此外,如果主机名如果在`〜/ .ssh/config`中定义,则第一个`ssh`方法有效,而第二个`nmap`方式失败,``failed to resolve""`.

2> 小智..:
ssh -q -o "BatchMode=yes" -i /home/sicmapp/.ssh/id_rsa @. "echo 2>&1" && echo $host SSH_OK || echo $host SSH_NOK


一行输出:(ssh -q -o“ BatchMode = yes” -o“ ConnectTimeout = 3” user@host.com“ echo 2>&1” && echo SSH_OK || echo SSH_NOK)| 尾-n1

3> 小智..:

你可以使用这样的东西

$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@host echo ok 2>&1)

如果ssh连接正常,这将输出"ok"



4> iarroyo..:

补充@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

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有