Contents

scp跟sftp是不一樣的東西

很多人在工作上會把 SCP 和 SFTP 混著講,因為它們都常透過 SSH 傳檔,登入方式也很像。但如果真的要做系統串接、寫自動化腳本,這兩者其實不是同一件事。

這篇把差異整理成比較實務的角度,之後遇到「伺服器有開 SSH,為什麼這個工具還是傳不上去」這類問題時會比較好判斷。

先講結論

  1. SCP 比較像是透過 SSH 做遠端複製。
  2. SFTP 是一套完整的檔案傳輸協議。

雖然兩者都可能走 SSH port 22,但協議層和功能模型不一樣。

SCP 的特性

SCP 很適合單純把檔案從 A 複製到 B,例如:

1
scp /local/file user@host:/remote/path

它的優點是簡單、直覺;缺點是功能比較少,像是續傳、目錄操作、互動式瀏覽都不如 SFTP 完整。

SFTP 的特性

SFTP 比較像是一套正式的檔案管理協議,可以做上傳、下載、列目錄、改名、刪除等操作。

1
2
3
sftp user@host
sftp> put /local/file /remote/path
sftp> get /remote/file /local/path

如果你的需求不是一次性複製,而是要穩定交換檔案,SFTP 通常會更適合。

為什麼這差異在實務上重要

有些伺服器雖然開了 SSH,但未必同時完整支援 SCP 與 SFTP。你如果只憑「都是走 SSH」就直接串,最後很可能會踩到:

  1. 某個 GUI 工具可以連,但程式碼不行。
  2. 某個帳號能 SFTP,卻不能 SCP。
  3. 傳輸中斷後,SCP 重新來過,SFTP 卻有較完整的處理方式。

在程式裡怎麼選

如果是程式自動化傳檔,我通常會優先考慮 SFTP,因為它在錯誤處理、檔案操作能力和整體穩定性上比較完整。

像在 PHP 裡,如果是透過 SSH2 extension 操作遠端檔案,很多時候實際用的也是 SFTP 模式。

小結

SCP 和 SFTP 雖然常被一起提,但不是同一個東西。簡單複製檔案時,SCP 很方便;需要更完整、可維護的檔案傳輸流程時,SFTP 通常是比較穩的選擇。把這兩者分清楚,後面在選工具、查權限或排連線問題時會省很多時間。