問題背景
ASP.NET 網站欲整合 SharpSSH 實現瀏覽器端 SSH 連線 Linux 伺服器,執行指令並回顯結果。WinForm 可行,Web 環境報錯無法實例化。
根本原因
- ASP.NET 執行身分(IIS 應用程式池身分)權限極低,無桌面互動權限,無法啟動 SSH 客戶端進程/建立網路連線。
- SharpSSH 依賴底層 Socket/執行緒模型,在 IIS 請求執行緒中受限於信任等級與沙箱。
可行架構
- 後端服務模式(推薦):
- 開發獨立 Windows Service / .NET Core Console App / Linux Daemon,部署於有網路權限的主機。
- 服務內整合
SSH.NET (Renci.SshNet) 或 SharpSSH,暴露 REST/gRPC API(POST /ssh/exec)。
- ASP.NET 前端呼叫 API,獲取指令輸出並渲染頁面。
- ActiveX / NPAPI 外掛(已淘汰):
- 僅 IE 支援,現代瀏覽器 (Edge/Chrome/Firefox) 已移除支援,**不建議**。
- WebSSH 開源專案:
- WebSSH (Python/Go) 提供 WebSocket + xterm.js 終端機模擬,可直接嵌入網頁。
關鍵技術點
- SSH 庫選擇:
SSH.NET 純 managed、NuGet 安裝、支援 .NET Core/Framework,優於 SharpSSH。
- 非同步執行:避免阻塞 IIS 執行緒,使用
async/await 配合 Task.Run。
- 安全性:SSH 金鑰/密碼加密儲存,API 加上 JWT 鑑權,審計所有指令日誌。
總結
網頁直連 SSH 不可行,**後端服務 + API** 是正規解法,技術成熟、安全可控。