如果检查 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 可用性?的主要内容,如果未能解决你的问题,请参考以下文章
AWS之SSH登录:使用 PuTTY 从 Windows 连接到 Linux 实例
无法通过 python 通过 SSH 连接到 postgres 服务器