编写一个shell脚本,实现在多台远程主机上并行执行命令,并通过SSH公钥认证和异步处理返回执行结果。
时间: 2024-11-11 20:36:43 浏览: 7
在自动化运维任务中,实现跨多台远程主机的命令并行执行是一个常见的需求。为了帮助你达到这一目标,建议深入阅读《批量同步执行:shell脚本实现多台远程主机命令》这一资料,它将为你提供详尽的脚本编写指导和实现细节。
参考资源链接:[批量同步执行:shell脚本实现多台远程主机命令](https://wenku.csdn.net/doc/6412b577be7fbd1778d43400?spm=1055.2569.3001.10343)
首先,确保你已经为每台远程主机生成了SSH公钥,并将公钥添加到每台主机的授权密钥列表中,以实现免密登录。然后,编写一个shell脚本,该脚本首先定义目标主机列表和需要执行的命令。脚本的核心逻辑可以通过`xargs`和`ssh`命令组合实现,并行执行。
具体来说,使用`xargs`的`-P`选项可以设置并发数,从而允许脚本在指定数量的主机上并行运行命令。例如,如果你想在四台远程主机上并行执行命令,可以在脚本中使用如下命令:
```bash
ssh 用户名@主机IP '命令' < /dev/null & xargs -P 4 -I {} ssh 用户名@{} '命令' < /dev/null
```
这里,`{}`是一个占位符,表示替换为`xargs`从标准输入中读取到的每一项。`&`符号确保了SSH命令在后台执行,从而允许`xargs`并行启动多个SSH进程。`-I {}`选项后接的`{}`会被`xargs`替换为输入行中的当前项。
此外,为了处理异步执行的结果,你可以利用`wait`命令等待所有后台进程完成。你可以将每个后台任务的PID(进程标识符)存储在一个数组中,然后使用`wait`命令等待所有PID结束。执行完毕后,你可以从每个主机收集命令执行的结果,并输出到日志文件中以供后续分析。
通过结合《批量同步执行:shell脚本实现多台远程主机命令》中的知识,你不仅能够实现命令的并行执行,还能确保脚本的健壮性和错误处理机制。这将极大地提高你进行自动化运维任务的效率和可维护性。
参考资源链接:[批量同步执行:shell脚本实现多台远程主机命令](https://wenku.csdn.net/doc/6412b577be7fbd1778d43400?spm=1055.2569.3001.10343)
阅读全文