如何一次性SSH登录多台服务器并批量并行执行命令?
方案总览
分为两个部分实现你的需求,第一部分是纯PowerShell脚本实现批量打开SSH登录窗口,第二部分是现成工具同时满足批量登录+并行执行命令的需求。
1 PowerShell批量打开SSH登录窗口实现
1.1 前置准备
- 安装
sshpass工具:用于ssh自动填充密码,Windows平台可通过Chocolatey执行choco install sshpass -y完成安装,也可以自行下载编译好的sshpass.exe放到系统PATH目录下。 - 准备服务器列表文件:新建
servers.txt,每行写入一台服务器的IP/域名,示例如下:
192.168.1.10
192.168.1.11
192.168.1.12
...
1.2 完整脚本
新建脚本文件BatchSSHLogin.ps1,内容如下:
# 配置项,请自行修改 $loginUser = "你的统一用户名" $loginPass = "你的统一登录密码" $serverListPath = "C:\你的路径\servers.txt" # 读取服务器列表 $servers = Get-Content -Path $serverListPath foreach ($server in $servers) { # 启动独立PowerShell窗口执行SSH登录 Start-Process powershell.exe -ArgumentList @( "-NoExit", "-Command", "sshpass -p '$loginPass' ssh -o StrictHostKeyChecking=no $loginUser@$server" ) }
1.3 注意事项
- 脚本中的
-o StrictHostKeyChecking=no参数用于跳过首次登录的主机密钥确认提示,如果你已经手动确认过所有主机的密钥,可以删掉该参数提升安全性。 - 明文存储密码有泄露风险,建议优先改用SSH密钥登录,配置密钥后不需要
sshpass,直接执行ssh $loginUser@$server即可自动登录。
2 同时支持批量登录+并行执行命令的工具
推荐使用本地免费工具WindTerm,无需额外配置即可满足所有需求:
- 支持批量导入服务器列表,一键同时登录所有选中的服务器,自动打开独立会话窗口
- 自带「同步输入」功能,开启后你在任意一个会话窗口输入的命令,会自动同步发送到所有已登录的服务器执行,执行结果独立在对应窗口显示
- 完全开源无广告,支持Windows/macOS/Linux全平台
如果仅需要批量执行命令不需要交互式窗口,也可以使用命令行工具pssh,指定服务器列表即可并行执行命令并统一返回所有主机的执行结果。
内容的提问来源于stack exchange,提问作者Dixit Singla
相关产品推荐
相关产品推荐

