引言

這兩台在寫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
  2. ip:password
  3. ip:user:password
  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客户端

  1. 網絡連接失敗
ERROR Cannot connect to 10.10.10.101:22: connection refused

解決方案:檢查網絡連接和SSH服務狀態

  1. 密碼認證失敗
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配置時表現優異,能夠在幾秒鐘內完成複雜的互信配置工作。

/------------------作者介紹-----------------
姓名:黃廷忠