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

如何利用sshpass结合GNU Parallel原生选项在多服务器执行命令?

需求与问题梳理

核心需求

  • 使用密码认证(优先采用sshpass),而非公私钥认证;
  • 支持将服务器列表保存至文件,便于编辑;
  • 服务器使用不同端口,部分为默认22端口,部分为非默认端口。

环境与基础测试

环境中已导出SSHPASS变量,不使用GNU Parallel时,命令sshpass -e ssh <user>:@<ip> -p <port>可正常运行。

测试中发现特殊现象:parallel -S <user>@<ip>:<port> echo ::: 1无法正常工作,但parallel -S <user>:@<ip>:<port> echo ::: 1(注意<user>后额外添加的冒号)可正常运行,后续测试均保留该冒号格式。

已尝试方案及问题

  1. 将服务器列表存入iplist文件(每行格式为sshpass -e ssh <user>:@<ip> -p <port>),执行parallel --slf iplist echo ::: env时出现权限拒绝错误;改用env_parallel --env SSHPASS --slf iplist echo ::: env仍报错。
  2. 简化命令为cat iplist | env_parallel --env SSHPASS sshpass -e "ssh {} -p <port> 'env;hostname'",可部分运行但无法灵活配置端口;若将端口写入iplist文件,会出现hostname contains invalid characters错误。
  3. 最终可行方案:使用--colsep选项,命令为cat iplist | env_parallel --colsep ' ' --env SSHPASS "sshpass -e ssh {1} -p {2} 'env;hostname'" > results.txt,iplist每行格式为<ip> <port>,但默认22端口的服务器需硬编码22,仍不够理想。

期望优化方向

  1. 希望利用GNU Parallel原生选项简化语法,但不清楚各选项的影响与交互逻辑;
  2. 希望调试GNU Parallel的Perl脚本,了解各选项的工作机制(尤其是--onall参数)。

使用反馈

GNU Parallel整体表现优秀,--dry-run和--joblog参数对调试帮助很大,但针对这类未覆盖的场景,建议新增调试/贡献指南。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:17:29