全部產品
Search
文件中心

Elastic Compute Service:通過sftp/scp/rsync向Linux執行個體傳輸檔案

更新時間:Sep 16, 2025

當需要從本地 Linux 或 macOS 系統向Elastic Compute Service的 Linux 執行個體傳輸檔案時,scp, sftp,rsync 是三種常用的命令列工具。選擇和正確使用合適的工具,對於提升檔案傳輸的效率、可靠性與安全性至關重要。本文旨在提供這三種工具的情境化使用指南和最佳實務,協助使用者應對從簡單檔案上傳到大規模資料同步的需求。

工具介紹對比

在開始操作前,可根據具體情境選擇最合適的工具。

  • 臨時傳輸單個小檔案或配置:推薦使用 scp,文法最簡單,上手最快。

  • 需要互動式管理檔案(如查看目錄、刪除、重新命名):推薦使用 sftp,它提供一個類似 FTP 的互動式會話。

  • 大規模資料同步、定期備份、傳輸大量小檔案:推薦使用 rsync,其增量同步處理演算法效率最高。

  • 網路環境不穩定,傳輸大檔案:推薦使用rsyncsftp 的斷點續傳功能。

下表提供了更詳細的技術對比:

scp/ sftp/ rsync工具詳細對比

特性維度

SCP

SFTP

Rsync

效能特徵

大檔案:效能良好。

大量小檔案:效率低,因每個檔案都可能涉及新的串連開銷。

大檔案:效能良好,支援流水線操作。

大量小檔案:優於 scp,但仍不如 rsync

綜合效率高。尤其在第二次及後續同步時,僅傳輸檔案差異部分,可以節省頻寬和時間。

斷點續傳

不支援。傳輸中斷後必須從頭開始。

支援。通過 reget (下載)和 reput (上傳)命令對單個檔案實現。

支援。通過 --partial--append-verify 參數,能續傳檔案和目錄。

核心優勢

文法簡單,是系統預設內建的基礎工具,適合一次性、臨時性的傳輸任務。

提供互動式會話,可在遠程伺服器上直接進行檔案管理操作(如 lsrmmkdir)。

增量同步處理。支援過濾、刪除、限速、壓縮等進階選項。

資源消耗

CPU 和記憶體消耗較低。

互動式會話會保持一個持續的 SSH 串連,資源消耗中等。

在對比檔案差異時會消耗一定的 CPU 和記憶體,尤其在掃描海量檔案時。

操作步驟

準備工作與前置檢查

在執行檔案傳輸前,請完成以下準備與檢查工作。

  1. 擷取執行個體的公網 IP 位址 本地向執行個體傳輸檔案時,執行個體需開通公網。開通後可在 ECS 執行個體列表中記錄目標執行個體的公網 IP 位址。後續所有命令都將使用此 IP。

  2. 配置安全性群組規則 檔案傳輸依賴 SSH 協議,預設使用 22 連接埠。需確保執行個體所屬的安全性群組已允許存取來自本網的訪問請求。

    • 授權策略:允許

    • 協議類型:自訂 TCP

    • 連接埠範圍22/22 (或您的自訂 SSH 連接埠)

    • 授權對象:為了安全,建議僅填寫您的本地公網 IP 位址。

      可通過在本地終端執行 curl ifconfig.mecurl ip.sb 擷取。
  3. 檢查執行個體內部防火牆 除了安全性群組,執行個體作業系統內部的防火牆可能阻止串連。

    1. 登入執行個體,查看防火牆狀態

    2. 若防火牆開啟,參考開放指定連接埠或服務,需確保其已允許存取 SSH 服務或 22 連接埠。

方法一:使用 scp 傳輸檔案

SCP(Secure Copy Protocol)用於在本地和遠程主機之間進行簡單的檔案或目錄複寫。

上傳檔案或目錄到執行個體

需要上傳檔案或檔案夾到執行個體時,可以在本地執行以下命令,執行命令後,會提示您輸入密碼。

# 上傳單個檔案到執行個體
sudo scp <本地檔案路徑> <雲端服務器登入名稱>@<雲端服務器公網IP地址>:<雲端服務器檔案目錄>

# 上傳本地目錄到執行個體
sudo scp -r <本地目錄> <雲端服務器登入名稱>@<雲端服務器公網IP地址>:<雲端服務器檔案目錄>

樣本:

將本地的/opt/test.txt檔案上傳到公網IP為1xx.xxx.xxx.121執行個體的/home/ecs-user/路徑下,可通過以下命令實現:

sudo scp /opt/test.txt ecs-user@1xx.xxx.xxx.121:/home/ecs-user/

從執行個體下載檔案或目錄到本地

需要從執行個體下載檔案到本地時,可以在本地執行以下命令,執行命令後,會提示您輸入密碼。

當傳輸大量小檔案時,scp 效率較低。建議先將檔案打包成單個壓縮檔(如 .tar.gz)再傳輸,或改用 rsync
# 下載單個檔案到本地
sudo scp <雲端服務器登入名稱>@<雲端服務器公網IP地址>:<雲端服務器檔案路徑> <本地目錄>

# 下載執行個體目錄到本地
sudo scp -r <雲端服務器登入名稱>@<雲端服務器公網IP地址>:<雲端服務器檔案目錄> <本地目錄>

樣本:

將公網IP為1xx.xxx.xxx.121執行個體的/home/ecs-user/test.txt檔案下載到本地的/opt/路徑下,可通過以下命令實現:

sudo scp ecs-user@1xx.xxx.xxx.121:/home/ecs-user/test.txt /opt/

方法二:使用 sftp 進行互動式檔案傳輸

SFTP(SSH File Transfer Protocol)提供一個互動式會話,允許在傳輸檔案的同時進行遠程檔案管理。

串連到執行個體

在本地終端執行以下命令,建立 sftp 串連。串連成功後,終端提示符會變為 sftp>

sudo sftp <雲端服務器執行個體登入名稱>@<雲端服務器執行個體公網IP地址>

SFTP常用互動命令

sftp> 提示符下,可使用以下命令:

  • 遠程操作ls (列出遠程目錄),cd (切換遠程目錄),pwd (顯示遠程當前路徑),mkdir (建立遠程目錄),rm (刪除遠程檔案),rename (重新命名遠程檔案)。

  • 本地操作lls (列出本地目錄),lcd (切換本地目錄),lpwd (顯示本地當前路徑)。

上傳檔案或整個目錄到執行個體

# 上傳單個檔案
sftp> put <本地檔案路徑> <雲端服務器檔案目錄>

# 上傳整個目錄
sftp> put -r <本地目錄> <雲端服務器檔案目錄>

樣本:

  • 將本機/opt/test.txt檔案上傳至執行個體的/home/ecs-user/目錄下:

    sftp> put /opt/test.txt /home/ecs-user
  • 將本機/opt/test/目錄上傳至執行個體的/home/ecs-user/目錄下:

    sftp> put -r /opt/test/ /home/ecs-user/

從執行個體下載檔案或整個目錄到本地

# 下載單個檔案
sftp> get <雲端服務器檔案路徑> <本地目錄>

# 下載整個目錄
sftp> get -r <雲端服務器檔案目錄> <本地目錄>

樣本:

  • 將執行個體的/home/ecs-user/test.txt檔案下載至原生/opt目錄下:

    sftp> get /home/ecs-user/test.txt /opt
  • 將執行個體的/home/ecs-user/test/目錄下載至本地的/opt目錄下:

    sftp> get -r /home/ecs-user/test/ /opt

斷點續傳

當大檔案傳輸中斷時,可使用 reget(上傳) 和 reput(下載) 命令繼續傳輸。

# 繼續上傳
sftp> reput <本地檔案路徑> <雲端服務器檔案目錄>

# 繼續下載
sftp> reget <雲端服務器檔案路徑> <本地目錄>
SFTP斷點續傳僅對單個檔案有效。若傳輸整個目錄時中斷,建議退出後使用rsync進行高效同步。

中斷連線

當完成傳輸任務後,可以通過quitbye命令退出 sftp 會話。

方法三:使用 rsync 高效同步檔案和目錄

rsync適用於大規模、增量或重複性的傳輸任務。

安裝工具

確保本地和 ECS 執行個體上都已安裝 rsync

# CentOS / Alibaba Cloud Linux
sudo yum install -y rsync

# Debian / Ubuntu
sudo apt-get update && sudo apt-get install -y rsync

常用參數

rsync 的標準用法通常包含 -avz 參數:

  • -a (archive):歸檔模式,等同於 -rlptgoD,遞迴同步並保持檔案所有屬性(如許可權、時間戳記)。

  • -v (verbose):顯示詳細的傳輸過程。

  • -z (compress):在傳輸過程中壓縮資料,可節省頻寬。但在高頻寬鏈路上,CPU 壓縮可能成為瓶頸,不加 -z 反而更快。

生產環境常用參數

  • --delete:使目標目錄與來源目錄嚴格一致,會刪除目標目錄中多餘的檔案。

    重要

    刪除為高危操作,使用前請務必確認

  • --exclude='PATTERN':排除指定模式的檔案或目錄,如 --exclude='*.log'--exclude='node_modules/'

  • --bwlimit=KBPS:限制傳輸頻寬,單位為 KB/s。避免 rsync 佔用全部網路頻寬,影響其他服務。

  • --dry-run-n:類比運行。僅顯示將要執行的操作而不實際傳輸。

    重要

    建議在執行包含 --delete 的命令前使用此參數進行檢查

  • --partial:支援斷點續傳。若傳輸中斷,rsync 會保留未完成的檔案,下次運行時可基於此繼續傳輸。

上傳/同步檔案或目錄到ECS執行個體

當需要上傳檔案到執行個體時,可以在本地執行以下命令,執行命令後,會提示您輸入密碼。

sudo rsync -avz -e ssh <本地檔案或檔案夾路徑> <雲端服務器執行個體登入名稱>@<雲端服務器執行個體公網IP地址>:<執行個體目錄>

樣本:

  • /opt/test.txt檔案上傳至公網IP為1xx.xxx.xxx.121執行個體的/home/ecs-user目錄下,可使用以下命令:

    sudo rsync -avz -e ssh /opt/test.txt ecs-user@1xx.xxx.xxx.121:/home/ecs-user
  • 將本地/opt/test目錄,與公網IP為1xx.xxx.xxx.121執行個體的/home/ecs-user/test目錄同步,可使用以下命令:

    sudo rsync -avz -e ssh /opt/test/ ecs-user@1xx.xxx.xxx.121:/home/ecs-user/test

從執行個體下載/同步檔案或目錄到本地

當需要從執行個體下載檔案到本地時,可以在本地執行以下命令,執行命令後,會提示您輸入密碼。

sudo rsync -avz -e ssh <雲端服務器執行個體登入名稱>@<雲端服務器執行個體公網IP地址>:<執行個體檔案或檔案夾路徑> <本地目錄>

應用於生產環境

  • 傳輸海量小檔案:先打包,再傳輸 對於包含數萬甚至數百萬小檔案的目錄,直接使用 scprsync 會因大量的串連和中繼資料開銷而變得緩慢。可以先在源端打包壓縮,傳輸單個大檔案,然後在目標端解壓。

  • 使用 SSH 設定檔簡化命令 在本地 ~/.ssh/config 檔案中為 ECS 執行個體設定別名(以my-prod-server為例),可以簡化串連和傳輸命令。

    # 添加以下內容到 ~/.ssh/config
    Host my-prod-server
        HostName 118.178.x.x
        User ecs-user
        Port 22
        IdentityFile ~/.ssh/id_rsa_aliyun
        ServerAliveInterval 60

    配置後,命令將變得簡潔,樣本如下:

    # 原命令: 
    sudo scp -i ~/.ssh/id_rsa_aliyun local.txt ecs-user@118.178.x.x:/remote/
    # 現命令: 
    sudo scp local.txt my-prod-server:/remote/
    
    # 原命令: 
    sudo rsync -avz -e "ssh -i ~/.ssh/id_rsa_aliyun" local_dir/ ecs-user@...
    # 現命令: 
    sudo rsync -avz local_dir/ my-prod-server:/remote_dir/

常見問題

  • 如何通過指定連接埠傳輸檔案?

    • SCP:通過-P參數指定連接埠,scp -P <連接埠> <具體命令>

    • SFTP:通過-P參數指定連接埠,sftp -P <連接埠> <具體命令>

    • Rsync:通過修改-e參數來指定連接埠,rsync -avz -e "ssh -p <SSH服務的連接埠>" <具體命令>

  • 如何在通過金鑰組串連執行個體傳輸檔案時指定私密金鑰?

    • SCP:通過-i參數指定私密金鑰檔案,scp -i <私密金鑰檔案路徑> <本地檔案路徑> <具體命令>

    • SFTP:通過-oIdentityFile參數指定私密金鑰檔案,sftp -oIdentityFile=<私密金鑰檔案路徑> <具體命令>

    • Rsync:通過修改-e參數來指定連接埠,rsync -e "ssh -i <私密金鑰檔案路徑>" <具體命令>

相關文檔