Initial commit

This commit is contained in:
2026-04-24 17:41:53 +08:00
commit 7105e8b165
94 changed files with 8141 additions and 0 deletions

View 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**: 腳本內容嵌入 SOAPBase64 編碼
## 🛡️ 安全性比較
### 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. **完善錯誤處理和重試邏輯**