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 指令和 FTP 指令一樣嗎?

不一樣。SFTP 是透過 SSH 運作的另一套協定,它的指令集相似但並不相同。get、put、cd、ls、bye 這些核心指令兩邊都能用,但 SFTP 另外加入了 chmod、ln、df 等 Unix 風格的指令,用 reget/reput 續傳,而且沒有 ascii/binary 模式,每次傳輸都是二進位。傳統 FTP 用戶端的 mdelete、hash、literal 等指令,在 sftp 中並不存在。

如何用 SFTP 下載或上傳整個資料夾?

使用 -r(遞迴)旗標:get -r projectfolder 會下載整個目錄樹,put -r projectfolder 則會上傳一個目錄。目標目錄中不能已有會衝突的檔案。你也可以用 sftp -r user@host 開始工作階段,讓傳輸預設就以遞迴方式進行。

如何續傳中斷的 SFTP 傳輸?

用 reget filename 續傳下載到一半的檔案,用 reput filename 續傳上傳。接收端必須還留著那個不完整的檔案;sftp 會從中斷的地方繼續,而不是從頭開始。

Windows 有內建的 SFTP 指令嗎?

有。Windows 10(1809 及更新版本)與 Windows 11 都內建 OpenSSH 用戶端,所以你可以直接在命令提示字元或 PowerShell 中執行 sftp user@host,不需要額外的軟體。本頁列出的指令在 Windows、macOS 與 Linux 上的用法完全相同。

如何用腳本或自動化執行 SFTP 傳輸?

把指令寫進一個文字檔,每行一個,再執行 sftp -b batch.txt user@host。批次模式需要非互動式的驗證,實務上就是得先設定好 SSH 金鑰驗證。至於排程上傳、備份、同步這類週期性工作,內建排程器的用戶端能讓你不必維護腳本和工作排程器項目。

想用圖形化的 SFTP 用戶端嗎?

FTPie 是一套現代化的 Windows SFTP 用戶端,支援 SSH 金鑰驗證、主機金鑰驗證、拖放式遞迴傳輸,並內建排程器,最多 3 個伺服器連線免費。

免費下載 FTPie