當你第一次要把佈景主題、外掛或修好的 wp-config.php 丟回主機,FileZilla 的連線設定畫面通常會先問你一個問題:要用 FTP、SFTP 還是 FTPS?三個名字只差一兩個字母,連線埠、加密方式、防火牆會不會卡住,差別卻很大。選錯了,輕則檔案傳到一半卡住,重則帳號密碼在網路上以明文裸奔,被攔截就等於把整個網站交出去。
這篇把 FTP、SFTP、FTPS 三種主機檔案傳輸協定的差異講清楚:它們各自怎麼運作、安全性差在哪、連線埠與防火牆會遇到什麼問題,以及在台灣常見的虛擬主機與 cPanel 環境下,你實際上該選哪一個、設定要填什麼。先給結論:架新站、做新的傳輸需求,預設就選 SFTP。
FTP、SFTP、FTPS 三者最關鍵的差異是什麼
最關鍵的差異有三個層面:加密方式、使用的連線埠、以及底層協定根本不同。FTP 完全不加密,FTPS 是把 FTP 包進 SSL/TLS 加密層,SFTP 則是建在 SSH 之上、和 FTP 沒有血緣關係的另一套協定。
這點最容易被誤會。光看名字會以為三者是同一家族、可以互通,事實上一個 FTP 客戶端連不上 SFTP 伺服器,一個 SFTP 客戶端也連不上 FTPS 伺服器。它們解決的是同一件事(把檔案在你電腦和主機之間搬來搬去),但在網路封包層面是三條不同的路。
下表先讓你抓到全貌,後面每一節再展開:
| 比較項目 | FTP | FTPS | SFTP |
|---|---|---|---|
| 底層協定 | FTP(RFC 959) | FTP 外加 TLS | SSH(RFC 4253) |
| 預設連線埠 | 21 加 20 或動態埠 | 21 加動態埠(顯式)、990 加 989(隱式) | 22 單一埠 |
| 加密 | 無,全程明文 | TLS(連線時協商) | SSH 原生內建 |
| 身分驗證 | 帳號加密碼 | 帳號加密碼,外加伺服器憑證 | 帳號密碼,或 SSH 金鑰 |
| 防火牆難度 | 高(雙通道、被動埠範圍) | 高(與 FTP 相同) | 低(單一埠) |
| 連線數 | 控制與資料兩條 | 控制與資料兩條 | 單一連線完成全部操作 |
FTP 為什麼到現在還在用,又為什麼不該再用
FTP 是這三者裡最古老的,定義於 1985 年的 RFC 959,比 HTTP 還早問世將近二十年。它到現在仍存在,純粹是因為數十年累積的裝置與系統慣性,但對於新的網站維運需求,它有兩個源自那個年代的設計缺陷讓人無法接受。
第一個是雙通道設計。FTP 把「控制連線」(登入、列目錄、下達傳輸指令)放在 21 埠,把「資料連線」(真正的檔案位元組)放在另一條連線。這在 1971 年那種沒有防火牆、每台主機都有公開 IP 的網路裡沒問題,但今天它正是 FTP 穿越防火牆與 NAT 時各種卡頓的根源。
第二個是明文傳輸。FTP 的規格早於 TLS 出現,所以使用者名稱、密碼、指令、檔案內容全部以明文在網路上傳遞。只要有人在你和主機之間的網路路徑上監聽,就能把這些全部讀走。對於今天幾乎任何帶有敏感性的資料來說,純 FTP 等於沒有防護。
那為什麼還看得到它?多半是相容性橋接:老舊的 POS 機、某些工業或科學儀器、出廠就只內建 FTP 客戶端的設備,升級成本比繼續把它關在層層防火牆後面還高。但這是「不得不維護舊系統」的情境,不是「規劃新傳輸時的選項」。架 WordPress 站、傳佈景主題與外掛,沒有任何理由從 FTP 開始。
FTPS 是什麼,跟 FTP 差在哪
FTPS 是把純 FTP 加上一層 TLS 加密,全名是 FTP over SSL/TLS,有時寫成 FTP-SSL。它的協定語意和 FTP 完全一樣,一樣的指令、一樣的雙通道結構、一樣有主動與被動模式之分,差別只在於連線被 TLS 加密,而且伺服器會出示一張 X.509 憑證讓客戶端驗證。
FTPS 又分成兩種,連的埠不一樣,新手最常在這裡卡住:
- 顯式 FTPS(Explicit):客戶端先連上一般的 21 埠,再下達
AUTH TLS指令把連線升級成加密。這是目前的主流標準,FileZilla 裡標示為「FTP over TLS(explicit)」的就是它。 - 隱式 FTPS(Implicit):連線一建立就立刻進行 TLS 交握,控制走 990 埠、資料走 989 埠。這是 1990 年代末期的舊做法,現代環境多半視為已淘汰,但在一些舊系統上還看得到。
FTPS 解決了 FTP 的加密問題,卻原封不動繼承了其他所有 FTP 的麻煩。雙通道還在,主動與被動模式、被動埠範圍的防火牆設定問題一個都沒少。除此之外,你還多了一張 TLS 憑證要安裝、更新、輪替,憑證過期或不符就會讓連線整個斷掉。某些防火牆會因為看不進加密串流、無法追蹤控制通道的埠協商,乾脆把 FTPS 的資料連線丟棄。
FTPS 合理的使用時機,是你已經有一套必須維持 FTP 形式的整合(例如某個只支援 FTP 的合作夥伴或廠商流程),又需要替它補上加密。如果是從零開始的新需求,SFTP 是更乾淨的答案。
SFTP 是什麼,為什麼它通常是首選
SFTP 的全名是 SSH File Transfer Protocol,是這三者裡名字最誤導人的一個,因為它根本不是 FTP。它不共用 FTP 的程式碼、指令或設計血統,而是 SSH 的一個子系統,整個跑在一條 SSH 連線裡,預設走 22 埠。
它的運作流程是這樣:客戶端先對主機的 22 埠開啟一條 SSH 連線,接著做身分驗證(可以用密碼,生產環境更常用 SSH 金鑰對),驗證通過後請求 sftp 子系統,伺服器就在這條既有的 SSH 連線裡提供檔案傳輸服務。列目錄、下載、上傳、建資料夾、改權限,全部在同一條加密通道內完成。
SFTP 的所有好處都來自 SSH:預設就加密、原生支援金鑰驗證、單一埠運作、主機金鑰驗證、現代加密演算法。SSH 是全世界幾乎每一台伺服器拿來做遠端管理的標準,所以 SFTP 也繼承了二十多年的安全強化、函式庫支援與維運工具。對大多數人來說,選它的理由很實際:
- 對外只需要一個埠(22),防火牆設定單純,不會出現「列得出目錄卻傳不動檔案」那種被動埠問題。
- 預設加密,沒有 TLS 憑證要管理、不會憑證過期。
- 原生 SSH 金鑰驗證讓你輪替憑證時不必動到密碼。
- 每一個現代傳輸客戶端、每一家雲端平台、每一台 Unix 或 Linux 伺服器都內建支援。
哪一種最安全,SFTP 真的只是「加密版的 FTP」嗎
論安全性,SFTP 通常被視為最穩妥的選擇,但這不是因為它的加密強度天生勝過 FTPS,而是因為它更難被設定錯。SFTP 的加密是強制的、金鑰驗證是原生的、單一埠也縮小了攻擊面;FTPS 則需要你正確設定 TLS、備妥有效憑證、還要小心處理雙通道,每一個環節都是一個可能把流量曝露出去的設定漏洞。
要破除一個常見誤會:SFTP 並不是「把 FTP 打開加密開關」而已。它和 FTP 是兩套完全不同的協定,只是名字長得像,造成「三者同源」的錯覺。同樣地,SSH 也不會去「通道化」FTP,如果你想要在 SSH 連線上傳檔案,用的就是 SFTP,而不是把 FTP 塞進 SSH。
至於速度,實務上 SFTP 與 FTPS 的差距通常小到不會是決策依據。傳單一大檔時 FTPS 的每封包額外負擔較低、CPU 開銷可能略小;傳大量小檔時 SFTP 只需建立一條連線、反而可能較快。真實工作負載下,網路延遲與磁碟讀寫才是主導因素,不必為了帳面速度去選協定。
在 cPanel 與台灣常見虛擬主機上,連線設定要填什麼
回到最實際的場景:你買了一個虛擬主機方案,想用 FileZilla 把 WordPress 檔案傳上去,連線視窗該怎麼填?
第一步是去主機後台拿連線資訊。多數使用 cPanel 的主機商,會在後台的「FTP 帳號」區塊提供主機名稱、使用者名稱與埠號;不少台灣主機商預設就支援 SFTP,但有些需要你開通 SSH 或 Shell 存取權限後才能用,這點不確定時直接問主機商客服最快。拿到的資訊通常包含這幾項:
- 主機名稱(Host):可以是你的網域,或主機商給的伺服器位址、IP。用 SFTP 時,FileZilla 的協定要選「SFTP – SSH File Transfer Protocol」。
- 埠號(Port):SFTP 預設是 22,顯式 FTPS 是 21,隱式 FTPS 是 990。有些主機商基於安全會改成非標準埠,以後台給的為準。
- 使用者名稱與密碼:用主機後台建立的 FTP 或 SSH 帳號,不是你 WordPress 後台的登入帳密,兩者是不同系統。
如果你的主機只給 FTP 不給 SFTP,而且傳輸時遇到「能登入、能看目錄,但檔案傳到一半就停住」的狀況,多半是被動模式的埠範圍被防火牆擋住了。FTP 與 FTPS 在被動模式下,資料連線會用一段高位埠範圍,主機端與你這端的防火牆都得放行那段範圍才行。這正是 SFTP 只用單一埠、設定上省心的地方,能選 SFTP 就盡量用 SFTP。
值得一提的順帶情境是:有些電商或金流外掛會要求你把檔案或對帳資料以 FTP/SFTP 形式跟外部系統交換。這種收款相關的資料屬於高度敏感,原則上就是不要走純 FTP,能用 SFTP 就用 SFTP,至少也要 FTPS,至於具體的金流串接設定則依各服務的文件為準,不在本文範圍。
三者該怎麼選,一個簡單的判斷順序
把前面的內容收束成一條可以直接照做的決策路徑:規劃新的檔案傳輸時,預設選 SFTP,因為它單一埠、原生金鑰驗證、客戶端支援最廣,且最難設定錯。只有當你有一套既存、且必須維持 FTP 形式的整合,對方又無法改用 SFTP 時,才退而選顯式 FTPS,把它當成相容性需求而非首選。至於純 FTP,只在面對那些出廠就只會 FTP、沒有其他路可走的老舊裝置時才用,而且要把它隔離起來、把那組帳密當成隨時可能外洩來防範,絕不拿它傳任何敏感資料。
對經營 WordPress 網站的人來說,這個順序更直接:到主機後台確認有沒有開 SFTP,有就用,把 FileZilla 協定設成 SFTP、埠填 22、帳密用主機端的 FTP/SSH 帳號。下次連線設定畫面再跳出來問你要哪一種,你會知道為什麼選它,而不是隨手按一個。