當需要從本地 Linux 或 macOS 系統向Elastic Compute Service的 Linux 執行個體傳輸檔案時,scp, sftp,rsync 是三種常用的命令列工具。選擇和正確使用合適的工具,對於提升檔案傳輸的效率、可靠性與安全性至關重要。本文旨在提供這三種工具的情境化使用指南和最佳實務,協助使用者應對從簡單檔案上傳到大規模資料同步的需求。
工具介紹對比
在開始操作前,可根據具體情境選擇最合適的工具。
臨時傳輸單個小檔案或配置:推薦使用
scp,文法最簡單,上手最快。需要互動式管理檔案(如查看目錄、刪除、重新命名):推薦使用
sftp,它提供一個類似 FTP 的互動式會話。大規模資料同步、定期備份、傳輸大量小檔案:推薦使用
rsync,其增量同步處理演算法效率最高。網路環境不穩定,傳輸大檔案:推薦使用
rsync或sftp的斷點續傳功能。
下表提供了更詳細的技術對比:
操作步驟
準備工作與前置檢查
在執行檔案傳輸前,請完成以下準備與檢查工作。
擷取執行個體的公網 IP 位址 本地向執行個體傳輸檔案時,執行個體需開通公網。開通後可在 ECS 執行個體列表中記錄目標執行個體的公網 IP 位址。後續所有命令都將使用此 IP。
配置安全性群組規則 檔案傳輸依賴 SSH 協議,預設使用 22 連接埠。需確保執行個體所屬的安全性群組已允許存取來自本網的訪問請求。
授權策略:允許
協議類型:自訂 TCP
連接埠範圍:
22/22(或您的自訂 SSH 連接埠)授權對象:為了安全,建議僅填寫您的本地公網 IP 位址。
可通過在本地終端執行
curl ifconfig.me或curl ip.sb擷取。
檢查執行個體內部防火牆 除了安全性群組,執行個體作業系統內部的防火牆可能阻止串連。
登入執行個體,查看防火牆狀態。
若防火牆開啟,參考開放指定連接埠或服務,需確保其已允許存取 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> 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進行高效同步。
中斷連線
當完成傳輸任務後,可以通過quit或bye命令退出 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反而更快。
生產環境常用參數
上傳/同步檔案或目錄到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地址>:<執行個體檔案或檔案夾路徑> <本地目錄>應用於生產環境
傳輸海量小檔案:先打包,再傳輸 對於包含數萬甚至數百萬小檔案的目錄,直接使用
scp或rsync會因大量的串連和中繼資料開銷而變得緩慢。可以先在源端打包壓縮,傳輸單個大檔案,然後在目標端解壓。使用 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 <私密金鑰檔案路徑>" <具體命令>。
相關文檔
若需上傳至ECS的重要檔案進行備份,請參見建立快照。
若需要上傳檔案到Windows執行個體,可使用其他檔案傳輸方式,參見選擇傳輸檔案的方式。
若需從本地為Windows作業系統,需要向Linux執行個體傳輸檔案,可以使用WinSCP工具完成檔案傳輸操作,可參見在本地Windows使用WinSCP向Linux執行個體傳輸檔案。