# ssh互信自动化脚本 **Repository Path**: developerhonor/ssh-autoexkeys ## Basic Information - **Project Name**: ssh互信自动化脚本 - **Description**: ssh所有节点免第一次执行交互的互信自动化脚本。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 5 - **Created**: 2025-07-09 - **Last Updated**: 2025-11-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ssh-autoexkeys ## 1. 项目介绍 ssh-autoexkeys是一个自动化SSH密钥分发和互信配置工具,使用shell脚本编写,支持两种工作模式: - 所有主机密码相同、端口相同时的批量互信配置 - 各主机密码、端口不同时的精细化互信配置 该工具可以自动生成SSH密钥对、收集所有节点公钥、分发合并后的 authorized_keys 文件,确保所有节点之间可以互相免密码访问,极大简化了多节点环境下的SSH互信配置工作。 ## 2. 功能特性 - 支持两种配置模式:统一密码模式和差异化配置文件模式 - 自动验证主机连通性和端口可访问性 - 在所有节点上自动生成SSH密钥对 - 收集所有节点的公钥并合并到统一的authorized_keys - 自动分发authorized_keys到所有节点 - 测试节点间互信连接是否成功 - 支持自定义SSH密钥文件路径 - 自动加密配置文件中的密码,提高安全性 - 详细的日志记录功能 ## 3. 文件说明 - `autoexssh.sh`: 主脚本文件,实现所有核心功能 - `all_hosts`: 主机列表文件,每行一个主机名或IP地址,用于密码相同的场景 - `host_nodes.conf`: 详细配置文件,格式为 `ip:port:user:password`,每行一个主机,适用于所有场景 - `README.md`: 项目说明文档 ## 4. 先决条件 确保所有参与互信配置的主机安装了以下工具: ```bash # RHEL/CentOS/Rocky Linux 7及以前版本 yum install -y expect # RHEL/CentOS/Rocky Linux 8及以后版本 dnf install -y expect # Debian/Ubuntu apt-get install -y expect ``` ## 5. 使用方法 ### 5.1 所有主机密码相同的情况 1. 编辑`all_hosts`文件,添加所有需要配置互信的主机: - 使用主机名必须在所有主机节点上 /etc/hosts 文件中有对应的地址解析 ```bash # 编辑 all_hosts 文件 cat all_hosts server1 server2 server3 10.10.20.31 10.10.20.32 10.10.20.33 ``` 2. 执行脚本,指定统一的用户名、密码和端口: ```bash # 基本用法 sh autoexssh.sh -u username -P password -p 22 # 使用自定义密钥文件路径 sh autoexssh.sh -u username -P password -p 22 -f ~/.ssh/custom_key ``` ### 5.2 主机密码不同的情况 1. 编辑`host_nodes.conf`文件,为每个主机指定详细配置: ```bash # 编辑 host_nodes.conf 文件 cat host_nodes.conf 10.10.20.31:22:root:cmVkaGF0Cg== 10.10.20.32:22:root:cmVkaGF0MQo= 10.10.20.33:22:root:cmVkaGF0Mgo= .............. more ``` 2. 执行脚本,指定配置文件路径: ```bash # 基本用法 sh autoexssh.sh -c host_nodes.conf # 使用自定义密钥文件路径 sh autoexssh.sh -c host_nodes.conf -f ~/.ssh/custom_key ``` ## 6. 参数说明 脚本支持以下命令行参数: ``` sh autoexssh.sh 说明: 一个用于自动配置 ssh 互信的工具 用法一适用于所有主机密码相同的情况,只需要配置 all_hosts 主机地址即可 用法二适用于所有主机密码相同或不同的情况,需要严格按照配置格式配置 用法一: sh autoexssh.sh -u <用户名> -P <密码> [-p <端口>] [-f <密钥文件>] [-d] 用法二: sh autoexssh.sh -c <配置文件> [-f <密钥文件>] [-d] 选项: -u 服务器用户 (当不使用 -c 参数时必需) -P 服务器密码 (当不使用 -c 参数时必需) -p 服务器端口 (当不使用 -c 参数时可选,默认22) -c 指定配置文件路径,格式: ip:port:user:password 每行一个 -f 指定密钥文件路径 (可选,默认使用 ssh-keygen 默认路径: ~/.ssh/) -d 开启debug模式,显示详细输出 示例: sh autoexssh.sh -u root -P password -p 22 -f ~/.ssh/my_rsa_key sh autoexssh.sh -c hosts.conf -f ~/.ssh/my_rsa_key -d ``` ## 7. 注意事项 1. 确保执行脚本的用户对所有目标主机有SSH访问权限 2. 配置文件中的每行必须遵循`ip:port:user:password`格式,且所有字段不能为空 3. 使用自定义密钥文件路径时,确保该路径在所有主机上都可用且有正确的权限 4. 如果脚本执行过程中遇到问题,可以通过生成的日志文件查看详细错误信息 5. SSH连接默认设置了30秒超时,可根据网络环境在脚本中调整SSH_OPTIONS变量 ## 8. 故障排除 常见问题及解决方案: 1. **无法连接到主机**:检查网络连接、防火墙设置和SSH服务状态 2. **密码错误**:确保提供的密码正确,特别是在使用配置文件模式时 3. **权限被拒绝**:检查目标主机的用户权限和家目录权限 4. **密钥生成失败**:确保目标主机有足够的磁盘空间和正确的权限 5. **连接超时**:检查网络延迟,考虑调整SSH_OPTIONS中的ConnectTimeout值 ## 9. 示例 ### 使用统一配置模式 ```bash # 为三台服务器配置互信,使用相同的用户名和密码 sh autoexssh.sh -u root -P redhat -p 22 # 或者如下 sh autoexssh.sh -u root -P redhat -p 22 -f ~/.ssh/my_rsa_key ``` ### 使用差异化配置模式 ```bash # 使用配置文件配置多台具有不同凭据的服务器 sh autoexssh.sh -c host_nodes.conf # 或者如下 sh autoexssh.sh -c host_nodes.conf -f ~/.ssh/my_rsa_key ```