scp跟sftp是不一樣的東西
Contents
很多人在工作上會把 SCP 和 SFTP 混著講,因為它們都常透過 SSH 傳檔,登入方式也很像。但如果真的要做系統串接、寫自動化腳本,這兩者其實不是同一件事。
這篇把差異整理成比較實務的角度,之後遇到「伺服器有開 SSH,為什麼這個工具還是傳不上去」這類問題時會比較好判斷。
先講結論
- SCP 比較像是透過 SSH 做遠端複製。
- SFTP 是一套完整的檔案傳輸協議。
雖然兩者都可能走 SSH port 22,但協議層和功能模型不一樣。
SCP 的特性
SCP 很適合單純把檔案從 A 複製到 B,例如:
|
|
它的優點是簡單、直覺;缺點是功能比較少,像是續傳、目錄操作、互動式瀏覽都不如 SFTP 完整。
SFTP 的特性
SFTP 比較像是一套正式的檔案管理協議,可以做上傳、下載、列目錄、改名、刪除等操作。
|
|
如果你的需求不是一次性複製,而是要穩定交換檔案,SFTP 通常會更適合。
為什麼這差異在實務上重要
有些伺服器雖然開了 SSH,但未必同時完整支援 SCP 與 SFTP。你如果只憑「都是走 SSH」就直接串,最後很可能會踩到:
- 某個 GUI 工具可以連,但程式碼不行。
- 某個帳號能 SFTP,卻不能 SCP。
- 傳輸中斷後,SCP 重新來過,SFTP 卻有較完整的處理方式。
在程式裡怎麼選
如果是程式自動化傳檔,我通常會優先考慮 SFTP,因為它在錯誤處理、檔案操作能力和整體穩定性上比較完整。
像在 PHP 裡,如果是透過 SSH2 extension 操作遠端檔案,很多時候實際用的也是 SFTP 模式。
小結
SCP 和 SFTP 雖然常被一起提,但不是同一個東西。簡單複製檔案時,SCP 很方便;需要更完整、可維護的檔案傳輸流程時,SFTP 通常是比較穩的選擇。把這兩者分清楚,後面在選工具、查權限或排連線問題時會省很多時間。