Skip to content

wangb335/sshUserSetup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 SSH User Setup 工具

🇨🇳 中文 | 🇬🇧 English

一个用于 自动化配置 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[结束]
Loading

📂 示例

# 配置 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 互信配置繁琐、易出错 的痛点,提供 批量化、自动化、安全可控 的免密设置方案,适合 数据库集群、分布式系统、运维自动化场景 使用。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages