SFTP 指令參考
OpenSSH sftp 用戶端的所有指令,附語法與範例:連線、瀏覽、傳輸、權限與批次腳本。在 Windows 10/11、macOS 與 Linux 上的用法完全相同,因為它們都內建 OpenSSH 用戶端。
2026 年 7 月更新
連線到伺服器
SFTP 透過 SSH 運作(預設為連接埠 22),所以驗證與主機金鑰驗證的方式和 ssh 完全一樣。下列旗標要在工作階段開始之前加在命令列上:
| 指令/旗標 | 用途 | 範例 |
|---|---|---|
sftp user@host | 開始一個互動式 SFTP 工作階段。 | sftp alice@example.com |
-P port | 連線到非標準的連接埠(注意:這裡是大寫 P,和 ssh 不同)。 | sftp -P 2222 alice@example.com |
-i keyfile | 使用指定的 SSH 私密金鑰進行驗證。 | sftp -i ~/.ssh/deploy_key alice@example.com |
-b file | 批次模式:從檔案讀取指令,以非互動方式執行。 | sftp -b upload.txt alice@example.com |
-r | 讓整個工作階段中的 get/put 都以遞迴方式執行。 | sftp -r alice@example.com |
sftp user@host:path | 直接取回一個檔案後就結束(不進入互動式工作階段)。 | sftp alice@example.com:/logs/app.log |
如果連線遭拒或卡住,請先用 SFTP 連線測試工具 檢查伺服器,再用 SFTP 驗證方式檢查工具 確認它接受哪些驗證方式。
下載與上傳
| 指令 | 用途 | 範例 |
|---|---|---|
get | 從伺服器下載一個檔案。 | get report.pdf |
get -r | 下載一個目錄及其中的所有內容。 | get -r backups |
put | 上傳一個本機檔案到伺服器。 | put site.zip |
put -r | 以遞迴方式上傳一個目錄。 | put -r dist |
mget | 下載符合某個模式的多個檔案。 | mget *.log |
mput | 上傳符合某個模式的多個檔案。 | mput *.html |
reget | 續傳下載到一半的檔案。 | reget big-backup.tar |
reput | 續傳上傳到一半的檔案。 | reput big-backup.tar |
progress | 開啟或關閉傳輸進度表。 | progress |
這裡沒有 ascii/binary 切換:SFTP 一律逐位元組傳輸檔案,所以不會因為換行字元轉換而損壞任何東西。
批次模式與腳本
若要無人值守地傳輸,請把指令寫進一個檔案(每行一個),再以批次模式執行 sftp。批次模式遇到第一個錯誤就會中止,而且必須使用金鑰驗證,因為它無法提示你輸入密碼:
# upload.txt cd /var/www/site lcd C:\Projects\site\dist put -r . bye C:\> sftp -b upload.txt -i C:\keys\deploy_key deploy@example.com
這樣可以運作,但每一個週期性工作都代表你得維護一份腳本、一把金鑰和一個工作排程器項目。如果你寧可在介面裡設定「每天凌晨 2:00 上傳這個資料夾」,並附帶重試、通知與歷程記錄,那正是 FTPie 的排程傳輸在做的事。
關於 SFTP 指令
SFTP(SSH 檔案傳輸協定)並不是「透過 SSH 的 FTP」,而是建立在 SSH 連線層之上的另一套協定,定義於 IETF 的 draft-ietf-secsh-filexfer 系列草案。Windows、macOS 與 Linux 中的 sftp 指令是 OpenSSH 的用戶端實作,本頁記錄的正是它的指令集。因為一切都在 SSH 裡執行,一個開放的連接埠(22)就同時承載驗證、指令與加密資料,不必設定被動模式的連接埠範圍,也不必處理 TLS 憑證。
從傳統 FTP 轉過來的嗎?兩套指令有重疊,但在一些重要的地方並不相同。ftp.exe 與 RFC 959 協定指令請見 FTP 指令參考。
常見問題
不一樣。SFTP 是透過 SSH 運作的另一套協定,它的指令集相似但並不相同。get、put、cd、ls、bye 這些核心指令兩邊都能用,但 SFTP 另外加入了 chmod、ln、df 等 Unix 風格的指令,用 reget/reput 續傳,而且沒有 ascii/binary 模式,每次傳輸都是二進位。傳統 FTP 用戶端的 mdelete、hash、literal 等指令,在 sftp 中並不存在。
使用 -r(遞迴)旗標:get -r projectfolder 會下載整個目錄樹,put -r projectfolder 則會上傳一個目錄。目標目錄中不能已有會衝突的檔案。你也可以用 sftp -r user@host 開始工作階段,讓傳輸預設就以遞迴方式進行。
用 reget filename 續傳下載到一半的檔案,用 reput filename 續傳上傳。接收端必須還留著那個不完整的檔案;sftp 會從中斷的地方繼續,而不是從頭開始。
有。Windows 10(1809 及更新版本)與 Windows 11 都內建 OpenSSH 用戶端,所以你可以直接在命令提示字元或 PowerShell 中執行 sftp user@host,不需要額外的軟體。本頁列出的指令在 Windows、macOS 與 Linux 上的用法完全相同。
把指令寫進一個文字檔,每行一個,再執行 sftp -b batch.txt user@host。批次模式需要非互動式的驗證,實務上就是得先設定好 SSH 金鑰驗證。至於排程上傳、備份、同步這類週期性工作,內建排程器的用戶端能讓你不必維護腳本和工作排程器項目。
想用圖形化的 SFTP 用戶端嗎?
FTPie 是一套現代化的 Windows SFTP 用戶端,支援 SSH 金鑰驗證、主機金鑰驗證、拖放式遞迴傳輸,並內建排程器,最多 3 個伺服器連線免費。
免費下載 FTPie