当前位置: 首页 > 工具 > 正文

我们的文章会在微信公众号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种参数格式,按复杂度递增:

  1. ip – 使用所有默认值(port=22, user=root, password=huangyihan)
  2. ip:password – 使用默认值(port=22, user=root)
  3. ip:user:password – 使用默认值(port=22)
  4. 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.exessh命令
  • 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
  • 详细步骤:每个操作步骤都有记录
  • 结果汇总:最终的执行结果表格

故障排查

常见问题及解决方案

  1. SSH命令未找到

    ERROR SSH command check failed: SSH command not found. Tried: ssh.exe, ssh. Please install OpenSSH client
    

    解决方案:安装OpenSSH客户端

  2. 网络连接失败

    ERROR Cannot connect to 10.10.10.101:22: connection refused
    

    解决方案:检查网络连接和SSH服务状态

  3. 密码认证失败

    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免密登录配置的痛点,具有以下优势:

  1. 操作简单:支持多种参数格式,减少用户输入
  2. 功能完整:支持单向配置、互信模式和删除功能
  3. 安全可靠:不覆盖现有配置,自动检查SSH命令可用性
  4. 跨平台:支持Windows、Linux、macOS三大平台
  5. 日志详细:完整的操作日志,便于问题排查

这个工具特别适合需要管理多台服务器的运维人员,能够显著提高工作效率,减少配置错误。通过实际的使用案例可以看出,工具在处理Oracle RAC集群的SSH配置时表现优异,能够在几秒钟内完成复杂的互信配置工作。

/——————作者介绍—————–
姓名:黄廷忠
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)
——————————————-/

运维工具:支持win、linux、macos的平台的免密一键配置工:等您坐沙发呢!

发表评论

gravatar

? razz sad evil ! smile oops grin eek shock ??? cool lol mad twisted roll wink idea arrow neutral cry mrgreen

快捷键:Ctrl+Enter