1000 台 Linux 服务器的命令 ssh 连接

1000 台 Linux 服务器的命令 ssh 连接

请帮助我解决以下情况。

我有1000台linux服务器。我需要找出哪些服务器正在接受来自我的主服务器的无密码连接。下面是我使用的命令。以下命令的问题是,当目标服务器要求输入密码时,我的循环停止工作。

for i in `cat srv`; do echo Server $i\n;  ssh $i "uptime"; done

输出:

Server server001

04:56:01 up 62 days,  9:18,  0 users,  load average: 0.09, 0.14, 0.13

服务器服务器002

Password:

我该如何解决它?

答案1

尝试-o BatchMode=yes作为ssh选项。

这可以防止在命令行中确认密码以及接受远程主机指纹。

您可能希望检查 ssh 的返回代码

for host in $(< serverlist) 
do
  echo testing $host
  if ssh -o BatchMode=yes $host uptime
  then echo host $host OK
  else echo host $host KO
  fi
done > result.log

答案2

使用 GNU Parallel 你可以这样做:

查找可以执行此操作的服务器不是接受无密码登录:

cat srv |
  parallel timeout 3 ssh {} true ' &>/dev/null ||' echo {}

要查找接受无密码登录的服务器:

parallel --nonall --timeout 3 --slf srv --tag echo

添加-j100一次在 100 台服务器上运行。

答案3

使用 SSH 选项指定您只想使用 PubKey 而不是密码身份验证:

for i in `cat srv`; do echo Server $i\n;  ssh -o PubKeyAuthentication=yes -o PasswordAuthentication=no $i "uptime"; done

这超出了本问题的范围,但您可能需要检查ssh命令的返回值以确定连接是否成功。

相关内容