如何使用Shell的for语句通过SSH批量访问多台机器?
批量SSH访问多台机器的for循环实现
你可以通过两种实用的bash for循环写法完成批量访问需求:
方法1:用seq生成带前导零的序号
for num in $(seq -w 1 30) do ssh "machine${num}" cat /data/restart.sh done
seq -w参数会自动生成宽度统一的数字(01、02…30),完美匹配你的机器命名格式- 通过
machine${num}拼接出完整的机器主机名
方法2:用bash大括号扩展(更简洁)
如果你的bash版本支持(绝大多数现代bash都兼容),可以直接用大括号扩展生成所有机器名:
for host in machine{01..30} do ssh "$host" cat /data/restart.sh done
这种写法无需单独处理数字变量,直接生成machine01到machine30的完整主机列表
额外实用提示
- 建议先配置免密SSH登录,否则每台机器都会要求输入密码,批量操作会极其繁琐
- 若想并行执行以加快速度,可把命令放到后台,最后等待所有任务完成:
for host in machine{01..30} do ssh "$host" cat /data/restart.sh & done wait - 如果需要保存每台机器的输出结果,可以重定向到单独文件:
for host in machine{01..30} do ssh "$host" cat /data/restart.sh > "${host}_restart.sh" done
内容的提问来源于stack exchange,提问作者AnonymousKKYY
相关产品推荐
相关产品推荐

