Initial commit
This commit is contained in:
142
docs/SSH_vs_WinRM_Comparison.md
Normal file
142
docs/SSH_vs_WinRM_Comparison.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# SSH vs WinRM 方案比較
|
||||
|
||||
## 📊 整體比較
|
||||
|
||||
| 項目 | SSH 方案 | Python + pywinrm 方案 |
|
||||
|------|----------|----------------------|
|
||||
| **設定複雜度** | ⭐⭐⭐ 中等 | ⭐⭐⭐⭐ 較高 |
|
||||
| **跨平台相容性** | ⭐⭐⭐⭐⭐ 優秀 | ⭐⭐⭐ 中等 |
|
||||
| **Windows 整合** | ⭐⭐ 普通 | ⭐⭐⭐⭐⭐ 原生支援 |
|
||||
| **錯誤處理** | ⭐⭐⭐ 基本 | ⭐⭐⭐⭐ 進階 |
|
||||
| **效能** | ⭐⭐⭐⭐ 快速 | ⭐⭐⭐ 中等 |
|
||||
| **安全性** | ⭐⭐⭐⭐ 成熟 | ⭐⭐⭐ 依設定 |
|
||||
|
||||
## 🔍 詳細比較
|
||||
|
||||
### SSH 方案(當前實作)
|
||||
|
||||
#### ✅ 優點:
|
||||
- **成熟穩定**: SSH 是經過時間考驗的協議
|
||||
- **廣泛支援**: 所有 Unix-like 系統都內建支援
|
||||
- **簡單設定**: 只需要 OpenSSH Server
|
||||
- **安全傳輸**: 加密連線,成熟的認證機制
|
||||
- **檔案傳輸**: `scp` 直接整合檔案上傳
|
||||
- **已驗證**: 所有現有腳本都正常運作
|
||||
|
||||
#### ❌ 缺點:
|
||||
- **非 Windows 原生**: 需要額外安裝 OpenSSH Server
|
||||
- **編碼問題**: 中文 Windows 環境需要手動處理 UTF-8 BOM
|
||||
- **錯誤處理**: 依賴 PowerShell 的錯誤回報
|
||||
- **會話限制**: 每次執行都是新的會話
|
||||
|
||||
#### 💻 使用示例:
|
||||
```bash
|
||||
./recon.sh # 使用預設設定
|
||||
HOST=pc-74269 ./recon.sh # 覆寫主機名
|
||||
USER_NAME=user ./recon.sh # 覆寫使用者名稱
|
||||
```
|
||||
|
||||
### Python + pywinrm 方案
|
||||
|
||||
#### ✅ 優點:
|
||||
- **Windows 原生**: WinRM 是 Windows 內建的遠端管理協議
|
||||
- **PowerShell 整合**: 直接執行 PowerShell 命令和腳本
|
||||
- **結構化錯誤處理**: 可以區分不同類型的錯誤
|
||||
- **會話管理**: 可以保持持久連線,執行多個命令
|
||||
- **詳細日誌**: 內建完整的日誌記錄
|
||||
- **自動編碼處理**: 自動處理 UTF-8 BOM 問題
|
||||
- **彈性認證**: 支援多種認證方式(Basic, NTLM, Kerberos)
|
||||
|
||||
#### ❌ 缺點:
|
||||
- **設定複雜**: 需要正確配置 WinRM 服務和防火墻
|
||||
- **網路要求**: 需要開放 5985/5986 port
|
||||
- **依賴程式庫**: 需要安裝 Python 和 pywinrm
|
||||
- **跨平台限制**: macOS 和 Linux 上的 PowerShell Core 不支援 WSMan
|
||||
- **安全考量**: HTTP 模式需要 AllowUnencrypted=true
|
||||
|
||||
#### 💻 使用示例:
|
||||
```bash
|
||||
python3 recon-winrm.py # 使用預設設定
|
||||
HOST=pc-74269 python3 recon-winrm.py # 覆寫主機名
|
||||
python3 winrm_executor.py --script recon.ps1 --test-connection # 測試連線
|
||||
```
|
||||
|
||||
## 🚀 實作架構比較
|
||||
|
||||
### SSH 架構:
|
||||
```
|
||||
macOS/Linux ──SSH──> Windows OpenSSH Server ──> PowerShell
|
||||
│ │
|
||||
└── scp 上傳腳本 ────────┘
|
||||
```
|
||||
|
||||
### WinRM 架構:
|
||||
```
|
||||
macOS/Linux ──HTTP/HTTPS──> Windows WinRM Service ──> PowerShell
|
||||
│ │
|
||||
└── Python pywinrm ─────────┘
|
||||
```
|
||||
|
||||
## 📈 效能比較
|
||||
|
||||
### 連線建立時間:
|
||||
- **SSH**: ~0.5-1 秒(TCP handshake + SSH negotiation)
|
||||
- **WinRM**: ~1-2 秒(HTTP connection + SOAP envelope processing)
|
||||
|
||||
### 腳本執行:
|
||||
- **SSH**: 直接 PowerShell 執行
|
||||
- **WinRM**: SOAP 封裝 + PowerShell 執行(額外 overhead)
|
||||
|
||||
### 檔案傳輸:
|
||||
- **SSH**: `scp` 二進制傳輸,高效
|
||||
- **WinRM**: 腳本內容嵌入 SOAP,Base64 編碼
|
||||
|
||||
## 🛡️ 安全性比較
|
||||
|
||||
### SSH:
|
||||
- ✅ 預設加密所有通訊
|
||||
- ✅ 公鑰認證支援
|
||||
- ✅ 成熟的安全記錄
|
||||
- ⚠️ 需要額外安裝 OpenSSH Server
|
||||
|
||||
### WinRM:
|
||||
- ⚠️ HTTP 模式未加密(需要 HTTPS 模式)
|
||||
- ✅ 支援 Windows 整合認證
|
||||
- ✅ 可設定憑證認證
|
||||
- ⚠️ 需要正確配置以確保安全
|
||||
|
||||
## 🎯 建議使用情況
|
||||
|
||||
### 選擇 SSH 方案當:
|
||||
- ✅ 已有穩定運作的 SSH 環境
|
||||
- ✅ 重視簡單性和可靠性
|
||||
- ✅ 團隊熟悉 SSH/Unix 工具
|
||||
- ✅ 需要最佳效能
|
||||
|
||||
### 選擇 WinRM 方案當:
|
||||
- ✅ 想要深度 Windows 整合
|
||||
- ✅ 需要進階 PowerShell 功能
|
||||
- ✅ 計劃長期的 Windows 管理自動化
|
||||
- ✅ 安全政策禁止額外的 SSH 服務
|
||||
|
||||
## 🔧 混合方案建議
|
||||
|
||||
考慮到各自的優缺點,建議的混合策略:
|
||||
|
||||
1. **保持 SSH 作為主要方案** - 穩定、快速、已驗證
|
||||
2. **WinRM 作為特殊用途** - 需要持久會話或進階 PowerShell 功能時使用
|
||||
3. **提供雙重選項** - 讓使用者根據環境選擇適當的連線方式
|
||||
|
||||
```bash
|
||||
# 環境變數控制連線方式
|
||||
CONNECTION_TYPE=ssh ./script.sh # 預設 SSH 方式
|
||||
CONNECTION_TYPE=winrm ./script.sh # 使用 WinRM 方式
|
||||
```
|
||||
|
||||
## 📋 下一步建議
|
||||
|
||||
1. **等待目標機器重新上線**
|
||||
2. **完成 WinRM 設定和測試**
|
||||
3. **建立效能基準測試**
|
||||
4. **實作混合連線選擇機制**
|
||||
5. **完善錯誤處理和重試邏輯**
|
||||
Reference in New Issue
Block a user