SSH 一键互信配置脚本 V2.0 使用指南
项目地址
https://git.orcy.net.cn/pony/ssh_trust
使用场景
这里我列了一些互信脚本的使用场景:
- 数据库集群部署:在 Oracle RAC、MySQL 集群等数据库集群部署时,需要配置集群节点间的 SSH 互信。
- 容器化环境:Docker Swarm、Kubernetes 集群节点间需要 SSH 互信进行管理。
- 自动化运维:Ansible、Puppet 等自动化工具需要 SSH 免密访问被管理主机。
- 负载均衡集群:Nginx、HAProxy 等负载均衡集群的配置同步需要 SSH 互信。
- 备份同步:定期备份脚本需要 SSH 免密访问远程存储服务器。
参数详解
[root@localhost ~]# ./ssh_trust.sh
用法: ./ssh_trust.sh [-u 用户名] [-P 端口号] -p 密码 [-i "IP1,IP2,..." | -c 配置文件] [-d]
参数说明:
-u 用户名 : SSH 连接的用户名(默认为当前用户)
-P 端口号 : SSH 连接的端口号(默认为22)
-p 密码 : SSH 连接的密码
-i IP列表 : 目标主机IP地址,用逗号分隔
-c 配置文件 : 包含IP地址的配置文件路径(每行一个IP)
-d : 开启调试模式
配置文件格式:
# 这是注释行
10.168.1.110
10.168.1.111
10.168.1.112
示例1 (命令行IP): ./ssh_trust.sh -p 'password' -i "10.168.1.110,10.168.1.111,10.168.1.112"
示例2 (配置文件): ./ssh_trust.sh -p 'password' -c /path/to/hosts.conf
示例3 (指定用户): ./ssh_trust.sh -u root -p 'password' -c /path/to/hosts.conf
示例4 (自定义端口): ./ssh_trust.sh -P 2222 -p 'password' -c /path/to/hosts.conf
示例5 (调试模式): ./ssh_trust.sh -d -p 'password' -c /path/to/hosts.conf
使用案例
案例 1:Oracle RAC 集群互信配置
场景:配置 3 节点 Oracle RAC 集群,为 oracle 用户建立 SSH 互信
# 方式 1:使用命令行指定 IP
./ssh_trust.sh -u oracle -p oracle123 -i "192.168.1.10,192.168.1.11,192.168.1.12"
# 方式 2:使用配置文件
cat<<-EOF>oracle_hosts.conf
192.168.1.10
192.168.1.11
192.168.1.12
EOF
./ssh_trust.sh -u oracle -p oracle123 -c oracle_hosts.conf
案例 2:非标准 SSH 端口配置
场景:服务器使用 2222 端口提供 SSH 服务
./ssh_trust.sh -u root -p admin123 -P 2222 -i "10.168.1.100,10.168.1.101"
案例 3:Kubernetes 集群节点互信
场景:为 Kubernetes 集群的 5 个节点配置 root 用户互信
创建配置文件 k8s_nodes.conf:
# Kubernetes 主节点
10.0.1.10
10.0.1.11
10.0.1.12
# Kubernetes 工作节点
10.0.1.20
10.0.1.21
执行配置:
./ssh_trust.sh -p k8s_admin_pwd -c k8s_nodes.conf
案例 4:调试模式排查问题
场景:配置过程中遇到问题,需要详细的调试信息
./ssh_trust.sh -d -u mysql -p mysql123 -i "172.16.1.10,172.16.1.11"
执行示例如下:
案例 5:混合环境批量
配置场景:在已经部分配置互信的环境中,只配置未完成的主机
./ssh_trust.sh -u appuser -p app123 -i "192.168.1.5,192.168.1.6,192.168.1.7,192.168.1.8"
脚本会智能跳过已配置的主机:
[INFO] 检查现有互信配置...
[SUCCESS] 192.168.1.5: 已配置互信
[INFO] 192.168.1.6: 需要配置互信
[SUCCESS] 192.168.1.7: 已配置互信
[INFO] 192.168.1.8: 需要配置互信
[INFO] 需要配置互信的主机: 192.168.1.6 192.168.1.8
配置文件使用
配置文件格式
# 这是注释行,会被忽略
192.168.1.10
192.168.1.11
# 可以添加说明注释
# 生产环境服务器
192.168.1.20
192.168.1.21
# 测试环境服务器
192.168.1.30
配置文件优势
- 可重用:配置文件可以重复使用,便于标准化;
- 可读性:支持注释,便于团队理解和维护;
- 版本控制:可以纳入 Git 等版本控制系统;
- 批量管理:便于管理大量主机 IP;
常见问题和解决方案
1.脚本执行后没有输出就退出
原因:可能是 SSH 连接卡住或权限问题
解决:使用调试模式查看详细信息
./ssh_trust.sh -d -u username -p password -i "ip_list"
2."用户不存在" 错误
原因:目标用户在当前系统不存在
解决:确保要配置互信的用户在当前系统存在
# 检查用户是否存在
id username
# 如果不存在,创建用户
useradd username
3."端口不可达" 错误
原因:目标主机 SSH 服务未启动或端口配置错误
解决:
# 检查SSH服务状态
systemctl status sshd
# 检查SSH端口配置
ss -tlnp | grep :22
# 如果使用非标准端口
./ssh_trust.sh -P 2222 -p password -i "ip_list"
4."连接超时" 错误
原因:网络不通或防火墙阻止
解决:
# 检查网络连通性
ping target_ip
# 检查SSH端口连通性
telnet target_ip 22
# 检查防火墙规则
iptables -L | grep 22
5.expect 工具未安装
原因:系统缺少 expect 工具
解决:脚本会自动安装,如果失败可手动安装
# CentOS/RHEL
yum install -y expect
# Ubuntu/Debian
apt-get install -y expect
最佳实践建议
1. 安全考虑
- 强密码:使用复杂的 SSH 密码;
- 网络隔离:在可信网络环境中执行;
- 及时清理:配置完成后及时删除临时文件;
- 权限控制:合理设置 SSH 密钥文件权限;
2. 操作规范
- 测试先行:在测试环境先验证脚本;
- 备份重要数据:配置前备份现有 SSH 密钥;
- 分批执行:大规模环境分批次执行;
- 记录操作:保留执行日志以便追溯;
3. 环境准备
- 统一用户:确保所有目标主机用户一致;
- 网络连通:确保网络连通性良好;
- 时间同步:保持各主机时间同步;
- 资源充足:确保系统资源充足;
4. 监控验证
- 定期检查:定期验证 SSH 互信状态;
- 日志监控:监控 SSH 访问日志;
- 自动化测试:集成到自动化测试流程;
- 文档更新:及时更新配置文档;
故障排查流程
1. 基础检查
# 1. 检查网络连通性
ping target_ip
# 2. 检查SSH服务
ssh -p port target_ip
2. 权限检查
# 1. 检查用户权限
id target_user
# 2. 检查SSH目录权限
ls -la ~/.ssh/
3.调试模式
# 使用调试模式获取详细信息
./ssh_trust.sh -d [其他参数]
4. 手动验证
# 手动测试SSH连接
ssh -o BatchMode=yes target_user@target_ip echo "test"
本文链接:https://www.orcy.net.cn/4271.html,转载请附上原文出处链接
发表评论