在現代企業環境中,Linux 與 Windows 並存是常態。本篇將深入探討如何穩定地將 Linux Agent 產出的 Zip 檔案派送至 Windows 目標伺服器。
雖然有許多專業的部署工具(如 Octopus Deploy 或 Ansible),但對於追求輕量與高掌控度的團隊來說,原生的 scp (Secure Copy) 是最穩定的選擇。
ssh/scp 無法在腳本中非互動式輸入密碼的問題。在 Windows Server 2019+ 啟動 OpenSSH Server 後,建議進行以下進階設定:
預設情況下,SSH 連線進入的是 cmd.exe。為了支援更強大的部署腳本,應改為 PowerShell:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name "DefaultShell" -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
在 Linux 下執行 scp 傳送到 Windows 時,路徑應使用正斜線 /。
例如:administrator@<IP>:D:/AP/Incoming/。OpenSSH 服務會自動將其映射到正確的 Windows 路徑。
警告:千萬不要直接在指令中寫死密碼,如 sshpass -p "123456" ...。這會導致密碼出現在 ps 指令或 Jenkins 日誌中。
正確做法:使用環境變數注入。
# Jenkins 會自動遮罩輸出
export SSHPASS=$TARGET_PASSWORD
sshpass -e scp -o StrictHostKeyChecking=no artifact.zip administrator@<IP>:D:/AP/Incoming/
-e:告訴 sshpass 從 SSHPASS 環境變數讀取密碼。-o StrictHostKeyChecking=no:自動接受目標主機的 SSH 指紋,這在自動化流程中是必須的。當我們利用 AI 快速產出多個 Hotfix 版本時,這種「輕量級派送」機制能確保產出物以秒級的速度送達目標。相較於笨重的代理程式(Agent-based)方案,SSH 派送幾乎不占用目標伺服器的資源。
透過 sshpass 與 OpenSSH,我們建立了一條跨越 OS 邊界的高速公路。產出物抵達目標後,下一步就是如何「在地化」地執行安裝。明天,我們將解析核心部署腳本 DeploySite.ps1。