scp 與 sftp:安全的遠端檔案傳輸
在 Linux 系統管理與開發工作中,檔案傳輸是日常最頻繁的操作之一。過去我們可能習慣使用 ftp 或 rcp,但這些協定在傳輸過程中以明文發送帳號密碼與檔案內容,極易被竊聽。隨著網路安全意識的提升,基於 SSH 協定建構的 scp 與 sftp 成為了標準解決方案。它們不僅加密了傳輸通道,更利用了 SSH 的強大認證機制。這篇文章將深入解析這兩種工具的差異、用法與實際應用場景。
核心差異:批量複製 vs. 互動式管理
雖然 scp 和 sftp 都依賴 SSH 協定,但它們的設計哲學截然不同:
- scp (Secure Copy):專注於「複製」。它適合快速、批量地在本地與遠端之間移動檔案。語法類似
cp,直觀且高效,但缺乏互動性,無法在傳輸過程中進行目錄瀏覽或檔案刪除。 - sftp (Secure File Transfer Protocol):提供類似 FTP 的互動式 shell 環境。適合需要精細控制、瀏覽遠端目錄結構、或進行少量檔案管理的場景。
使用 scp 進行高效傳輸
scp 的語法結構非常簡潔,主要分為「本地到遠端」、「遠端到本地」以及「遠端到遠端」三種情境。
1. 基本檔案複製
將本地檔案上傳至遠端伺服器:
scp ./report.pdf user@192.168.1.100:/home/user/docs/
將遠端檔案下載至本地:
scp user@192.168.1.100:/home/user/docs/report.pdf ./
2. 指定非標準 SSH Port
當伺服器 SSH 端口未使用預設的 22 時,需使用 -P 參數(注意是大寫 P)指定端口:
scp -P 2222 ./local_file.txt user@192.168.1.100:/tmp/
3. 遞迴複製目錄
使用 -r 參數可以複製整個目錄及其內容:
scp -r ./project_folder user@192.168.1.100:/home/user/projects/
4. 限制頻寬
在頻寬受限的環境中,可使用 -l 參數限制傳輸速度(單位為 Kbit/s):
scp -l 800 large_file.iso user@192.168.1.100:/backup/
使用 sftp 進行互動式管理
sftp 提供了一個交互式命令提示符,讓你可以像在本地一樣操作遠端檔案。
1. 連線與基本操作
啟動 sftp 會話:
sftp user@192.168.1.100
進入 sftp 提示符後,常用命令包括:
ls/lls:列出遠端/本地目錄內容。cd/lcd:切換遠端/本地目錄。pwd/lpwd:顯示當前目錄。put:上傳檔案(類似 scp)。get:下載檔案(類似 scp)。mput/mget:批量上傳/下載。
2. 實際操作範例
假設我們要上傳當前目錄下的所有 .log 檔案到遠端的 /var/log/app/:
sftp> cd /var/log/app/
sftp> lcd /home/user/logs/
sftp> mput *.log
若要下載遠端目錄,由於 get 預設不遞迴,需加上 -r 參數:
sftp> get -r /home/user/data/ ./local_backup/
進階技巧:使用 SSH Config 簡化指令
對於經常連線的伺服器,建議在 ~/.ssh/config 中設定別名與參數,避免每次輸入冗長的指令。
Host webserver
HostName 192.168.1.100
User admin
Port 2222
IdentityFile ~/.ssh/id_rsa_web
設定後,scp 指令可簡化為:
scp ./config.yml webserver:/etc/myapp/
常見問題與解決方案
Q1: 連線時出現 "Permission denied (publickey)" 錯誤
這通常表示 SSH 金鑰認證失敗。請檢查以下幾點:
- 遠端伺服器的
~/.ssh/authorized_keys是否已正確包含你的公鑰。 ~/.ssh目錄權限是否為700,authorized_keys是否為600。- 嘗試使用
-v參數進行除錯,例如scp -v ./file user@host:/dir,查看具體失敗環節。
Q2: 傳輸大檔案時速度極慢或斷線
- 頻寬問題:使用
scp -l限制速度反而可能因重傳機制變慢,建議確認網路穩定性。 - 加密負載:部分舊硬體 SSH 伺服器處理高頻寬加密時效能低落,可嘗試更換加密演算法,例如在 scp 指令中加入
-c aes128-ctr。 - 斷線續傳:
scp本身不支持斷線續傳。若網路不穩,建議使用rsync搭配 SSH 協定(rsync -avz -e ssh),它具備更好的斷點續傳與增量傳輸能力。
小結
scp 勝在簡單快速,適合自動化腳本與大量檔案的初步遷移;sftp 則勝在互動性與管理彈性,適合需要檢查目錄結構或進行少量檔案維護的工作。對於現代 Linux 管理員而言,理解兩者差異並熟練使用 SSH Config,將能大幅提升日常工作效率與安全性。若追求更強大的斷點續傳與增量同步,rsync 則是值得進一步探索的利器。