unix - 使用脚本在 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'
它不起作用。
解决方案
假设您要运行的命令数量很少,您可以:
创建将从 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
推荐阅读
- python - Jupyter Notebook 加载 .ipynb 文件时出错
- regex - RegEx - 删除特定模式(例如前缀和后缀)的更有效方法
- android - 致命异常:java.lang.IllegalStateException:失败保存状态:活动片段已从 FragmentManager 中删除
- mysql - mysql 查询不会为每个月的每一天提供 0 值。只会返回大于 0 的值
- python - 模块“numpy”没有属性“testing”
- mongodb - Mongodb搜索逗号分隔字符串和变音符号Insentive搜索
- javascript - 新的 Array() 与 Array() JavaScript
- http - 如何计算nginx中的平均处理时间
- python - Django导航栏链接在帖子中消失
- vim - 如何在 Vim 中看到“[D]elete”交换文件的选项?