使用脚本在N个服务器之间进行SSH

时间:2018-07-20 15:12:39

标签: unix ssh ssh-keys

我有n台服务器,例如c0001.test.cloud.com,c0002.test.cloud.com,c0003.test.cloud.com,我想在这些服务器之间进行ssh: 从服务器:c0001执行ssh到c0002,然后退出服务器。 回到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<<'ENDSSH',但是它不起作用。

1 个答案:

答案 0 :(得分:0)

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

  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