我有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'
,但是它不起作用。
答案 0 :(得分:0)
假设要运行的命令数量很少,则可以:
创建将从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
在本地计算机上,SSH到c0001.test.cloud.com并执行commands.sh
中的命令:
ssh -o StrictHostKeyChecking=no -q appAccount@c0001.test.cloud.com 'bash -s' < commands.sh
但是,如果您的要求变得更加复杂,那么更健壮的解决方案可能是使用群集管理工具,例如ClusterShell