我们的文章会在微信公众号IT民工的龙马人生和博客网站 ( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
引言
这两台在写ADG一键部署的脚本,写到RAC到RAC时,密码验证和密码继承的问题就耗了很多时间,哎,搞冒火了,就想先去掉密码验证和集成的问题,采用SSH来实现,但是遇到Win下面还需要手动配置等效性,哎。于是将原来的SHELL配置Linux平台的脚本,用AI写了一个支持Win、MacOS、Linux通用的脚本,取名叫sshtrust,主要是根据我自己日常的三个需求来实现的:
- 配置本机到远程的免密登陆,主要是我MacOS与我自己的需求机的需求。
- 配置源端服务器相互之间的免密登陆,如安装RAC时的需求。
- 命令执行时无需输入任何的东西,脚本参数要尽可能的简单。
- 支持每一台服务器自定义不同端口,用户名,密码,还要求尽可能少输入值。
需求出来了,用AI写就很简单了。
脚本获取
关注公众号,后台回复“脚本”二字,已经关注并回复过的就直接群里面下载即可。
脚本免费,别在问是否收费l
工具特性
核心功能
- 跨平台支持:支持Windows、Linux、macOS三大主流操作系统
- 灵活的参数格式:支持4种不同的输入格式,最大程度减少用户输入
- 双向模式:支持单向配置和互信模式
- 安全可靠:不覆盖现有SSH配置,只添加新的公钥
- 全程自动化:无需人工干预,一键完成配置
安全特性
- SSH命令检查:启动前自动检查SSH客户端是否可用
- 重复检查:避免重复添加相同的公钥
- 权限管理:自动设置正确的SSH目录和文件权限
- 连接超时:设置合理的SSH连接超时时间
使用方法
基本语法
sshtrust -i "服务器信息" [-e] [-d] [-l DEBUG]
参数说明
-i
:服务器信息,支持多种格式-e
:启用服务器之间的互信模式(可选),默认是执行脚本的服务器到-i指定的服务器的密码配置-d
:删除SSH信任配置(可选)-l
:日志级别,支持DEBUG、INFO、WARN、ERROR
支持的参数格式
工具支持4种参数格式,按复杂度递增:
ip
– 使用所有默认值(port=22, user=root, password=huangyihan)ip:password
– 使用默认值(port=22, user=root)ip:user:password
– 使用默认值(port=22)ip:port:user:password
– 完整格式
实际使用案例
案例1:单向SSH免密登录配置
场景:配置本地机器到4台Oracle RAC节点的SSH免密登录
命令:
sshtrust -i "10.10.10.101:grid:oracle,10.10.10.102:grid:oracle,10.10.10.106:grid:oracle,10.10.10.107:grid:oracle"
执行日志:
2025/10/19 11:48:39 SSH Trust Setup Tool started - Version: 1.0
2025/10/19 11:48:39 INFO SSH Trust Setup Tool started - Version: 1.0
2025/10/19 11:48:39 DEBUG Checking for SSH command: ssh
2025/10/19 11:48:39 DEBUG Found SSH command: ssh at /usr/bin/ssh
2025/10/19 11:48:39 INFO SSH command found: ssh
2025/10/19 11:48:39 INFO SSH key path: /Users/yihan/.ssh
2025/10/19 11:48:39 INFO SSH private key already exists: /Users/yihan/.ssh/id_rsa
2025/10/19 11:48:39 INFO Testing SSH connection to 10.10.10.101:22
2025/10/19 11:48:39 INFO SSH port connection successful: 10.10.10.101:22
2025/10/19 11:48:39 DEBUG Checking if SSH keyless login is available: 10.10.10.101:22
2025/10/19 11:48:40 INFO SSH keyless login already available: 10.10.10.101:22
2025/10/19 11:48:40 INFO Server 10.10.10.101:22 already configured for keyless login, skipping
结果汇总:
========================================================================================================================
SSH Trust Configuration Results Summary
========================================================================================================================
| IP | PORT | USER | PASSWORD | Port Status | Login Status | Config Status | Can Login |
+-----------------+-------+----------+--------------+----------+------------+------------+----------+
| 10.10.10.101 | 22 | grid | oracle | Success | Success | Already... | Yes |
+-----------------+-------+----------+--------------+----------+------------+------------+----------+
Successfully configured servers:
- 10.10.10.101:22 (grid)
SSH trust configuration completed
案例2:互信模式配置
场景:配置4台Oracle RAC节点之间的相互SSH免密登录
命令:
sshtrust -i "10.10.10.101:grid:oracle,10.10.10.102:grid:oracle,10.10.10.106:grid:oracle,10.10.10.107:grid:oracle" -e
执行过程:
2025/10/19 11:49:28 INFO Starting mutual trust configuration...
2025/10/19 11:49:28 INFO Generating key pair for server 10.10.10.101:22...
2025/10/19 11:49:28 INFO Testing SSH connection to 10.10.10.101:22
2025/10/19 11:49:28 INFO SSH port connection successful: 10.10.10.101:22
2025/10/19 11:49:28 INFO Server 10.10.10.101:22 key pair generation completed
互信验证过程:
2025/10/19 11:49:32 INFO Verifying mutual trust configuration...
2025/10/19 11:49:32 INFO Verifying SSH keyless login: 10.10.10.101:22 -> 10.10.10.102:22
2025/10/19 11:49:33 INFO SSH keyless login verification successful: 10.10.10.101:22 -> 10.10.10.102:22
2025/10/19 11:49:33 INFO Verifying SSH keyless login: 10.10.10.101:22 -> 10.10.10.106:22
2025/10/19 11:49:34 INFO SSH keyless login verification successful: 10.10.10.101:22 -> 10.10.10.106:22
最终结果:
Successfully configured servers:
- 10.10.10.101:22 (grid)
- 10.10.10.102:22 (grid)
- 10.10.10.106:22 (grid)
- 10.10.10.107:22 (grid)
SSH trust configuration completed
案例3:SSH信任删除
场景:删除之前配置的SSH信任关系
命令:
sshtrust -i "10.10.10.101:grid:oracle,10.10.10.102:grid:oracle,10.10.10.106:grid:oracle,10.10.10.107:grid:oracle" -d
执行过程:
2025/10/19 11:50:18 INFO Starting one-way trust deletion...
2025/10/19 11:50:18 INFO Deleting SSH trust from server 10.10.10.101:22...
2025/10/19 11:50:18 INFO Testing SSH connection to 10.10.10.101:22
2025/10/19 11:50:18 INFO SSH port connection successful: 10.10.10.101:22
2025/10/19 11:50:18 INFO Deleting SSH trust configuration from 10.10.10.101:22
2025/10/19 11:50:18 INFO SSH trust deletion successful: 10.10.10.101:22
删除结果:
| IP | PORT | USER | PASSWORD | Port Status | Login Status | Config Status | Can Login |
+-----------------+-------+----------+--------------+----------+------------+------------+----------+
| 10.10.10.101 | 22 | grid | oracle | Success | Success | Success | No |
| 10.10.10.102 | 22 | grid | oracle | Success | Success | Success | No |
| 10.10.10.106 | 22 | grid | oracle | Success | Success | Success | No |
| 10.10.10.107 | 22 | grid | oracle | Success | Success | Success | No |
+-----------------+-------+----------+--------------+----------+------------+------------+----------+
技术实现亮点
1. SSH命令检查机制
工具在启动时会自动检查SSH客户端是否可用,针对不同平台采用不同的检查策略:
Windows平台:
// 尝试执行SSH命令的版本检查
cmdExec := exec.Command(cmd, "-V")
cmdExec.Stdout = nil
cmdExec.Stderr = nil
err := cmdExec.Run()
Linux/macOS平台:
// 使用标准方法
path, err := exec.LookPath(cmd)
2. 跨平台兼容性
- Windows:支持
ssh.exe
和ssh
命令 - Linux/macOS:支持标准
ssh
命令 - 路径处理:自动适配不同操作系统的SSH密钥路径
3. 智能配置检测
工具会先检查是否已经配置了SSH免密登录,避免重复配置:
2025/10/19 11:48:39 DEBUG Checking if SSH keyless login is available: 10.10.10.101:22
2025/10/19 11:48:40 INFO SSH keyless login already available: 10.10.10.101:22
2025/10/19 11:48:40 INFO Server 10.10.10.101:22 already configured for keyless login, skipping
编译和部署
编译命令
# macOS/Linux版本
go build -o sshtrust ssh_trust_setup.go
# Windows版本
GOOS=windows GOARCH=amd64 go build -o sshtrust.exe ssh_trust_setup.go
帮助信息
$ ./sshtrust -h
SSH Trust Setup Tool - Version 1.0
Author: huangtingzhong@hotmail.com
Support: 18081072613
Usage:
sshtrust [options]
Options:
-i string
Server info, format: ip:port:user:password, comma separated
Supported formats:
ip (default: port=22, user=root, password=huangyihan)
ip:password (default: port=22, user=root)
ip:user:password (default: port=22)
ip:port:user:password (full format)
-e Enable mutual trust mode, configure SSH keyless login between servers
-d Delete SSH trust configuration from specified servers
-l string
Log level: DEBUG, INFO, WARN, ERROR (default: INFO)
-h, --help
Show this help message
日志管理
工具会自动生成详细的日志文件,格式为ssh_trust_setup_YYYYMMDD_HHMMSS.log
,包含:
- 操作时间戳:精确到秒
- 日志级别:INFO、ERROR、DEBUG
- 详细步骤:每个操作步骤都有记录
- 结果汇总:最终的执行结果表格
故障排查
常见问题及解决方案
-
SSH命令未找到
ERROR SSH command check failed: SSH command not found. Tried: ssh.exe, ssh. Please install OpenSSH client
解决方案:安装OpenSSH客户端
-
网络连接失败
ERROR Cannot connect to 10.10.10.101:22: connection refused
解决方案:检查网络连接和SSH服务状态
-
密码认证失败
ERROR Password login failed: ssh: handshake failed: ssh: unable to authenticate
解决方案:验证用户名和密码是否正确
调试模式
使用-l DEBUG
参数可以获取详细的调试信息:
sshtrust -i "10.10.10.101:grid:oracle" -l DEBUG
总结
sshtrust
工具通过自动化的方式解决了SSH免密登录配置的痛点,具有以下优势:
- 操作简单:支持多种参数格式,减少用户输入
- 功能完整:支持单向配置、互信模式和删除功能
- 安全可靠:不覆盖现有配置,自动检查SSH命令可用性
- 跨平台:支持Windows、Linux、macOS三大平台
- 日志详细:完整的操作日志,便于问题排查
这个工具特别适合需要管理多台服务器的运维人员,能够显著提高工作效率,减少配置错误。通过实际的使用案例可以看出,工具在处理Oracle RAC集群的SSH配置时表现优异,能够在几秒钟内完成复杂的互信配置工作。
/——————作者介绍—————–
姓名:黄廷忠
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)
——————————————-/
运维工具:支持win、linux、macos的平台的免密一键配置工:等您坐沙发呢!