2007年2月5日

Maven2: 使用 scp/sftp 進行網站部署時注意事項

在 Maven 2 中想要執行部署作業時,可以透過 SCP、SFTP、SSHEXEC、以及 FTP,其中 FTP 因為無法支援多階目錄上傳等作業(應該是懶的寫)所以除了用來部署網頁應用程式外,其他像是 repository 或 site 的部署作業都會優先考慮使用 SCP 或 SFTP (SSHEXEC 有跨平台的問題),不過最好用的應該還是 SCP 吧,它實際的動作是把待部署的檔案打包成一個 zip 檔上傳到遠方主機後再予以解開,相對來說效率最好。

在 Windows 環境下不管是 SCP 或 SFTP 下進行部署作業時,有很大的機會看到以下這個訊息並等待部署人員輸入 yes 以便繼續部署作業。通常還會發現這個訊息竟然是每次都會出現,不禁懷疑是不是什麼地方沒設定才會被迫透過人工的介入以完成整個部署作業。

[INFO] [site:deploy]
The authenticity of host 'aa.bb.cc.dd' can't be established.
RSA key fingerprint is ee:77:22:ff:aa:33:66:dd:22:ee:11:99:ff:dd:77:55.
Are you sure you want to continue connecting? (yes/no):

其實,就和 OpenSSH 一樣,Maven 2 使用的 JSch -- Java Secure Channel 會搜尋使用者家目錄下有無 .ssh/ 目錄,並將相關設定寫入該目錄下特定檔案中(和 OpenSSH 相容)。會造成 Maven 2 一直出現前述訊息的原因在於 JSch 無法存取到 "%USERPROFILE%\.ssh" 或 "$HOME/.ssh" 目錄(JSch 不會主動建立),所以解決的方式只須收建立該目錄後,JSch 即可自動建立相應的檔案 (known_hosts) ,也就不會一而再、再而三的要求部署人員介入部署作業了。

另外,如果有指定使用 key pair 方式登入的話,會在 SSH 連線時出現類似以下的訊息,可以注意看看。

Using private key: C:\ssh-key\my.webtest.privateKey