scp 與 sftp:安全的遠端檔案傳輸 文章首圖

scp 與 sftp:安全的遠端檔案傳輸

scp 與 sftp:安全的遠端檔案傳輸

在 Linux 系統管理與開發工作中,檔案傳輸是日常最頻繁的操作之一。過去我們可能習慣使用 ftprcp,但這些協定在傳輸過程中以明文發送帳號密碼與檔案內容,極易被竊聽。隨著網路安全意識的提升,基於 SSH 協定建構的 scpsftp 成為了標準解決方案。它們不僅加密了傳輸通道,更利用了 SSH 的強大認證機制。這篇文章將深入解析這兩種工具的差異、用法與實際應用場景。

核心差異:批量複製 vs. 互動式管理

雖然 scpsftp 都依賴 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 金鑰認證失敗。請檢查以下幾點:

  1. 遠端伺服器的 ~/.ssh/authorized_keys 是否已正確包含你的公鑰。
  2. ~/.ssh 目錄權限是否為 700authorized_keys 是否為 600
  3. 嘗試使用 -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 則是值得進一步探索的利器。