首页 > 解决方案 > 使用脚本在 N 台服务器之间进行 SSH

问题描述

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

因此,通过这种方式,它将在运行时执行脚本而无需输入任何输入,并且我们可以拥有 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<<'ENDSSH'它不起作用。

标签: unixsshssh-keys

解决方案


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

  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


推荐阅读