【问题标题】:SSH between N number of servers using script使用脚本在 N 台服务器之间进行 SSH
【发布时间】:2026-01-14 15:50:01
【问题描述】:

我有 n 台服务器,例如 c0001.test.cloud.com、c0002.test.cloud.com、c0003.test.cloud.com,我想在这些服务器之间进行 ssh,例如: 从服务器:c0001 对 c0002 执行 ssh,然后退出服务器。 回到c0001做ssh到c0003然后退出服务器。

因此,通过这种方式,它将在运行时执行脚本而无需输入任何输入,并且我们可以拥有 n 个服务器。 我写了一个脚本:

str1=c0001.test.cloud.com,c0002.test.cloud.com,c0003.test.cloud.com
string="$( cut -d ',' -f 2- <<< "$str1" )"
echo "$string"
for j in $(echo $string | sed "s/,/ /g")
do
    ssh appAccount@j
done

但是这个脚本运行不正常。我也通过传递参数检查了它
喜欢:-o StrictHostKeyChecking=no&lt;&lt;'ENDSSH' 但它不起作用。

【问题讨论】:

  • 如果你想让它退出,你需要你的ssh 来运行一个命令,甚至是ssh appAccount@j exit 但除此之外“运行不正常”非常模糊,它到底是什么没有做你想做的事情,或者你不想做的事情是什么?

标签: unix ssh ssh-keys


【解决方案1】:

假设您要运行的命令数量很少,您可以:

  1. 创建将从 c0001.test.cloud.com 运行到每个服务器的命令脚本。例如,在本地计算机上创建一个名为 commands.sh 的文件:

    hosts="c0002.test.cloud.com c0003.test.cloud.com"
    for host in $hosts do
        ssh -o StrictHostKeyChecking=no -q appAccount@$host <command 1> && <command 2>
    done
    
  2. 在你的本地机器上,ssh 到 c0001.test.cloud.com 并执行commands.sh中的命令:

    ssh -o StrictHostKeyChecking=no -q appAccount@c0001.test.cloud.com 'bash -s' < commands.sh
    

但是,如果您的要求变得更加复杂,更强大的解决方案可能是使用集群管理工具,例如 ClusterShell

【讨论】:

  • str1=c0001.test.cloud.com,c0002.test.cloud.com,c0003.test.cloud.com string="$( cut -d ',' -f 2-
  • 是的,在你的脚本中ssh appAccount@j 应该是ssh appAccount@$j