一个用于 自动化配置 SSH 免密互信 的 Shell 脚本,支持 单向/双向互信、集群主机批量配置、免交互执行,让集群环境快速完成 SSH 信任关系的建立。
📦 项目地址: github.com/wangb335/sshUserSetup
- 🔑 一键免密登录:自动生成并分发 SSH 公钥,省去繁琐的手工操作
- 🖥️ 支持多主机批量配置:通过
-hosts或-hostfile参数指定主机列表 - 🔄 双向互信 / 全面验证:支持
-advanced和-exverify,确保主机间全网互信 - ⚡ 免交互执行:结合
sshpass支持批量自动输入密码 - 📋 日志记录:全程输出带颜色高亮,同时写入日志文件
- 🔒 安全控制:支持私钥密码(passphrase),更好地保障安全
sshUserSetupCN.sh -user <用户名> \
[ -hosts "<空格分隔的主机列表>" | -hostfile <主机配置文件路径> ] \
[ -advanced ] [ -verify ] [ -exverify ] [ -logfile <日志文件路径> ] \
[ -confirm ] [ -shared ] [ -usePassphrase ] [ -noPromptPassphrase ] [ -sshpassword ]| 参数 | 说明 |
|---|---|
-user <用户名> |
指定远程主机用户 |
-hosts "<host1 host2>" |
直接传入主机列表 |
-hostfile <文件> |
从集群配置文件读取主机和用户信息 |
-advanced |
建立主机之间的 双向互信 |
-verify |
仅验证现有 SSH 互信,不进行配置 |
-exverify |
全面验证(本地到远程、远程到远程) |
-confirm |
自动确认配置过程(无需手工输入 yes/no) |
-shared |
适用于 NFS 共享用户目录的场景 |
-usePassphrase |
为私钥设置密码短语 |
-noPromptPassphrase |
不提示输入密码短语,走默认流程 |
-sshpassword |
使用 sshpass 支持免交互执行(需提前安装 sshpass) |
-logfile <路径> |
指定日志文件输出路径 |
-help |
显示帮助信息 |
flowchart TD
A[开始] --> B[解析命令行参数]
B --> C{是否 -help?}
C -->|是| C1[打印帮助并退出]
C -->|否| D[检查主机和用户参数]
D --> E{是否指定 hostfile?}
E -->|是| E1[解析 hostfile 获取主机列表]
E -->|否| E2[使用 -hosts 列表]
E1 --> F[检查日志目录并设置日志文件]
E2 --> F
F --> G[检测依赖命令: ssh, scp, ssh-keygen, ping, sshpass]
G --> H{依赖是否存在?}
H -->|否| H1[报错并退出]
H -->|是| I[检测远程主机连通性]
I --> J{是否全部可达?}
J -->|否| J1[报错并退出]
J -->|是| K[显示可达主机列表]
K --> L{是否 -verify?}
L -->|是| L1[仅验证 SSH 互信]
L -->|否| M[进入 SSH 配置流程]
M --> M1{是否 -confirm?}
M1 -->|否| M2[提示用户确认 yes/no]
M1 -->|是| N[跳过提示直接执行]
M2 --> N
N --> O{是否 -usePassphrase?}
O -->|是| O1[提示用户输入密码短语策略]
O -->|否| O2[生成无密码私钥]
O1 --> P[本地主机生成或更新 SSH key]
O2 --> P
P --> Q[配置本地主机 .ssh 文件: authorized_keys, known_hosts, config]
Q --> R{是否 -shared?}
R -->|是| R1[仅配置第一个远程主机]
R -->|否| R2[配置所有远程主机]
R1 --> S[远程主机创建 .ssh 目录并设置权限]
R2 --> S
S --> T[复制本地主机公钥到远程主机]
T --> U{是否 -advanced?}
U -->|是| V[远程主机生成密钥并交换公钥,建立双向互信]
U -->|否| W[仅建立本地到远程单向互信]
V --> X[更新远程 authorized_keys 和 known_hosts]
W --> X
X --> Y{是否 -exverify?}
Y -->|是| Y1[全面验证: 本地到远程 & 远程到远程]
Y -->|否| Y2[基础验证: 本地到远程]
Y1 --> Z[完成并输出日志]
Y2 --> Z
L1 --> Z
Z[结束]
# 配置 root 用户与多台主机的双向免密互信
./sshUserSetupCN.sh -user root -hosts "192.168.1.91 192.168.1.92 192.168.1.93" -advanced -exverify -confirm -noPromptPassphrase
# 使用 hostfile 文件,免交互一键配置
./sshUserSetupCN.sh -user root -hostfile /root/hosts.conf -advanced -exverify -confirm -sshpassword- 🖥️ 大规模集群环境:不再需要手动配置每台主机的
ssh-keygen && scp - 🔁 双向互信需求:数据库 RAC、Hadoop 集群等必须全网互信的场景
- ⚡ 快速运维:免交互选项支持一键批量配置,缩短部署时���
- 🔒 安全合规:可选私钥密码短语,避免无保护私钥带来的风险
脚本执行过程会同时输出到终端,并写入日志文件,日志路径默认:
/tmp/sshUserSetup_<日期时间>.log
示例日志输出带有颜色:
- ✅ 成功(绿色)
⚠️ 警告(黄色)- ❌ 错误(红色)
git clone https://github.com/wangb335/sshUserSetup.git
cd sshUserSetup
chmod +x sshUserSetupCN.sh本工具解决了 SSH 互信配置繁琐、易出错 的痛点,提供 批量化、自动化、安全可控 的免密设置方案,适合 数据库集群、分布式系统、运维自动化场景 使用。