iT邦幫忙

2026 iThome 鐵人賽

DAY 26
0
IT Operation

迎接 AI 開發爆發期:告別手動部署,帶領企業團隊從 Git 規範到 CI/CD 實戰系列 第 26

Day 26 跨平台派送實務:sshpass、scp 與 Windows OpenSSH 配置

  • 分享至 

  • xImage
  •  

在現代企業環境中,Linux 與 Windows 並存是常態。本篇將深入探討如何穩定地將 Linux Agent 產出的 Zip 檔案派送至 Windows 目標伺服器。

工具鏈選擇:為什麼是 sshpass + scp?

雖然有許多專業的部署工具(如 Octopus Deploy 或 Ansible),但對於追求輕量與高掌控度的團隊來說,原生的 scp (Secure Copy) 是最穩定的選擇。

  • sshpass:解決了 ssh/scp 無法在腳本中非互動式輸入密碼的問題。
  • OpenSSH for Windows:微軟官方支援的服務,讓 Windows 能像 Linux 一樣接受 SSH 連線。

Windows 端:OpenSSH 關鍵配置

在 Windows Server 2019+ 啟動 OpenSSH Server 後,建議進行以下進階設定:

1. 修改預設 Shell 為 PowerShell

預設情況下,SSH 連線進入的是 cmd.exe。為了支援更強大的部署腳本,應改為 PowerShell

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name "DefaultShell" -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

2. 處理路徑斜線問題

在 Linux 下執行 scp 傳送到 Windows 時,路徑應使用正斜線 /
例如:administrator@<IP>:D:/AP/Incoming/。OpenSSH 服務會自動將其映射到正確的 Windows 路徑。

安全實作:sshpass 的正確用法

警告:千萬不要直接在指令中寫死密碼,如 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 開發模式下的優勢

當我們利用 AI 快速產出多個 Hotfix 版本時,這種「輕量級派送」機制能確保產出物以秒級的速度送達目標。相較於笨重的代理程式(Agent-based)方案,SSH 派送幾乎不占用目標伺服器的資源。

總結

透過 sshpass 與 OpenSSH,我們建立了一條跨越 OS 邊界的高速公路。產出物抵達目標後,下一步就是如何「在地化」地執行安裝。明天,我們將解析核心部署腳本 DeploySite.ps1


上一篇
Day 25 MyDeploy.jenkinsfile (下) — 遠端部署與 PR 即時反饋
下一篇
Day 27 Windows 部署腳本 DeploySite.ps1:從壓縮檔到運作站台的自動化轉化
系列文
迎接 AI 開發爆發期:告別手動部署,帶領企業團隊從 Git 規範到 CI/CD 實戰30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言