You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bash利用SSH在多台主机并行执行命令并合并控制台输出?

多台远程主机SSH执行命令并合并输出的简洁方案

嘿,这个需求太常见了!不管是批量看实时日志还是跑统一命令,下面这几个方法都是我日常用得最多的,简洁又实用:

1. 专用并行SSH工具:pssh(最省心)

如果你经常做这类批量操作,pssh(Parallel SSH)绝对是首选——它专门为批量远程执行设计,输出管理特别友好。

首先得安装它,不同系统的包名略有差异:

  • Debian/Ubuntu: sudo apt install pssh
  • RHEL/CentOS: sudo yum install pssh
  • macOS: brew install pssh

然后准备一个主机列表文件(比如hosts.txt),每行一个主机地址,支持自定义用户名或端口:

user1@host1:22
user2@host2:2222
host3

接下来直接执行命令,比如实时tail日志并合并输出:

pssh -h hosts.txt -i 'tail -f /var/log/syslog'
  • -h 指定主机列表文件
  • -i 让每台主机的输出前缀带上主机名,方便你快速区分哪条日志来自哪台机器

2. 纯Bash脚本(无需额外工具,临时应急)

如果不想装新工具,用原生Bash就能搞定,适合临时用一次的场景:

# 把你的主机列表写在这里,也可以从文件读取
HOSTS=("host1" "admin@host2" "host3:2222")

for host in "${HOSTS[@]}"; do
    # 用sed给每行输出打上主机标签,避免不同主机的输出混在一起
    ssh $host 'tail -f /var/log/syslog' | sed "s/^/[$host] /" &
done
# 等待所有后台SSH进程结束
wait

这个脚本会把每个SSH命令放到后台并行执行,同时给每条输出加上主机前缀,最终所有结果都会合并到你的本地控制台。

关键注意事项

  • 一定要先配置SSH免密登录,不然每个连接都要输密码,批量操作就失去意义了(用ssh-keygen生成密钥,ssh-copy-id传到远程主机即可)
  • 对于实时日志类命令(比如tail -f),给输出加主机前缀非常重要,不然你根本分不清内容来源
  • 如果担心实时输出过于混乱,也可以把每个主机的输出重定向到临时文件,之后再合并查看,但这样就没法实时监控了

内容的提问来源于stack exchange,提问作者onkami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:14:22