首页 > 解决方案 > 检查 ssh 连接是否成功的脚本

问题描述

我有 100 台服务器。从第一台服务器,我想检查从第一台服务器到其他服务器的 ssh 连接是否正常。

如果OK,则输出OK,否则输出Failed。

我之前使用主机名和密钥对进行了一些设置,所以基本上我只需输入:

ssh name-server 

那我就知道结果了。

例如

失败案例:

[centos@tony]$ ssh server1
Last login: Thu Aug  9 17:01:21 2018 from 172.21.11.5
Connection to server1 closed.

好的案例:

[centos@tony]$ ssh server1
Last login: Thu Aug  9 17:01:21 2018 from 172.21.11.5

我有一个文件 list.txt 包括所有服务器的所有主机名。

server1
server2
...

我的脚本不起作用:

#!/bin/bash
for i in $(cat /home/centos/list.txt); do
result=`ssh i | grep closed`
if [ -z "$result" ] ; then
  echo "OK"
fi

标签: shell

解决方案


来自man ssh

退出状态

ssh 以远程命令的退出状态退出,如果发生错误,则以 255 退出。

所以只需在远程服务器上执行一个简单的命令并检查它是否成功。可以想象的最简单的命令是true(仅返回0/ 成功):

#!/bin/bash
for server in $(cat /home/centos/list.txt)
do
  if ssh $server "true"
  then
    echo "Server $server: OK"
  fi
done

推荐阅读