如果检查 ssh OK 然后连接到服务器 1,如果 ssh NOT OK 然后连接到服务器 2,如何检查 ssh 可用性?

Posted

技术标签:

【中文标题】如果检查 ssh OK 然后连接到服务器 1,如果 ssh NOT OK 然后连接到服务器 2,如何检查 ssh 可用性?【英文标题】:How to check ssh availability if check ssh OK then connect to server 1 and if ssh NOT OK then connect to server 2? 【发布时间】:2018-12-03 17:40:34 【问题描述】:

我有 2 台服务器。 第一台服务器始终处于活动状态,第二台服务器始终处于待机状态。 我正在尝试编写一个 bash 脚本来在执行任务之前检查这两个服务器的状态。 如果第一台主机死机(或将 SSH 连接到服务器 1 不正常),那么它将 SSH 连接到第二台主机以执行任务。

你知道怎么做吗?

【问题讨论】:

检查这里:***.com/questions/4936807/… 你应该能够检测到超时/失败 if ssh server1 true ; then ssh server1 ; else ; ssh server2 ; fi? @FreudianSlip:因为,2台服务器之间的连接是***隧道,所以超时/失败无法使用我的情况。 @Biffen:你能给我解释一下吗? @donald.sys 解释一下? 【参考方案1】:

EDIT2:由于 OP 提到有一个名为 IP.list 的文件,应该从中读取服务器名称,那么下面的内容可能会对您有所帮助。

while read server
do
  if [[ -n $(ssh user_name@"$server" "ls -ld /tmp") ]]
  then
      echo "$server is up."
      echo "Exiting from script now.."
      exit;
  else
      echo "$server is NOT up, look for another server."
  fi
done < "IP.txt"

编辑:由于 OP 说 ping 不是检查服务器可用性的选项,因此仅将 ssh 用于服务器。考虑到您的源服务器(从您运行脚本的位置)和目标服务器(您正在检查其状态的服务器之间存在无密码连接,因此不会提示您输入任何密码)

if [[ -n $(ssh user_name@server_name "ls -ld /tmp") ]]
then
    echo "Server 1 is up."
else
    echo "Server is NOT up, look for another server."
fi

您可以简单地对 SERVER1 执行 ping 并查看这是否成功,以防它不是意味着服务器未启动,您可以将您的东西移动到另一个站立服务器。

if [[ $(ping -c5 SERVER1 | grep -q "5 packets transmitted, 5 received") -eq 0 ]]
then
    echo "Server1 is up."
else
    echo "Server is NOT up, look for another server."
fi

【讨论】:

因为安全系统,我所有的服务器都拒绝ping。你有不同的想法吗? @donald.sys,现在请检查我的编辑并让我知道吗? [[ $(ssh user_name@server1 exit 10) -eq 10 ]] 不太可能是真的。您正在比较ssh输出,而不是它的退出代码。 @Biffen,很酷,现在更改了它并进行了测试,如果出现错误,它会显示错误。 @RavinderSingh13:是的。但这不是我所期望的。我有一个 IP.txt 文件,内容是 192.168.56.101 和 192.168.56.102。我想检查 ssh 连接到两台主机的情况并执行:+ 如果连接 SSH 到 192.168.56.101 成功,那么它将执行运行 script.sh 文件。 + 如果连接 SSH 到192.168.56.101 失败,执行连接 SSH 到 192.168.56.102 运行 script.sh。

以上是关于如果检查 ssh OK 然后连接到服务器 1,如果 ssh NOT OK 然后连接到服务器 2,如何检查 ssh 可用性?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Paramiko 和 RSA 密钥文件的嵌套 SSH

Jsch使用SSH协议连接到远程Shell执行脚本

AWS之SSH登录:使用 PuTTY 从 Windows 连接到 Linux 实例

无法通过 python 通过 SSH 连接到 postgres 服务器

使用 SSH 连接到AWS EC2 Linux 实例(Windows可用SSH)

设置双机互信中的ssh-copy-id命令妙用