引言
這兩台在寫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種參數格式,按複雜度遞增:
ipip:passwordip:user:passwordip: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配置時表現優異,能夠在幾秒鐘內完成複雜的互信配置工作。
/------------------作者介紹-----------------
姓名:黃廷忠