在兩臺設備之間傳輸文件是常見的運維需求,常用的安全文件傳輸工具包括sftp
、scp
、rsync
以及netcat
。本文將介紹如何使用這四種工具進行文件傳輸。
工具 | 特點及使用場景說明 |
sftp | 使用交互式文件管理的傳輸方式,傳輸前需先與遠程FTP服務器建立連接,連接后可以使用 |
scp | 用于快速傳輸單個文件或整個目錄。如果事先了解遠端文件目錄結構,可以使用 |
rsync | 主要用于文件同步、備份等場景,并支持增量拷貝。在需要傳輸大文件或網絡環境較差的情況下,可以考慮使用rsync工具。 |
netcat | 是一款功能較為完善的網絡工具,不僅支持文件傳輸,還具備端口掃描和端口連通性測試等功能。然而,在默認情況下, |
適用場景
sftp
和scp
工具支持的操作系統包括Linux、macOS和Windows。rsync
和netcat
支持的操作系統包括Linux和macOS。傳輸文件大小限制:文件大小不受限制。
重要若您的本地主機為Windows系統,除了選擇
sftp
和scp
命令行工具之外,也可以使用圖形界面的WinSCP
工具進行文件傳輸,有關操作,請參見通過WinSCP上傳或下載文件(本地主機為Windows)。以下情況,還可以通過Workbench或云助手上傳下載文件(不限制本地主機類型):
(單個文件不大于500 MB)通過Workbench工具上傳或下載。具體操作,請參見使用Workbench上傳或下載文件。
(單個文件不大于24 KB)通過云助手上傳文件至ECS。具體操作,請參見通過云助手上傳本地文件到ECS實例。
前提條件
通過sftp工具傳輸文件
sftp
命令會基于ssh
協議對所傳輸的文件進行加密處理,支持SSH
的完整安全性和身份驗證功能。不僅具備FTP協議的所有功能,還提供了更高的安全性和可靠性。
參數說明
參數 | 說明 |
-b | 設置批處理文件 |
-B | 設置緩沖區大小 |
-C | 使用壓縮模式 |
-F | 設置ssh配置文件 |
-o | 設置ssh選項 |
-P | 設置連接端口號 |
-R | 設置最大請求數 |
-4 | 強制使用IPv4地址 |
-6 | 強制使用IPv6地址 |
使用示例
登錄遠程FTP服務器
運行如下命令,以登錄遠程FTP服務器,并按照提示輸入遠程FTP服務用戶的密碼。
sftp <user-name>@<remote-ftp-server-ip>
回顯信息示例如下,說明連接遠程FTP服務器成功。
Connected to xxx.xxx.xxx.xxx. sftp>
運行如下命令,以列出遠程FTP服務器上的文件。
ls
說明如果
ls
不指定路徑,則顯示當前路徑下的文件列表,如果指定路徑,則顯示指定路徑下的文件列表。上傳或下載文件/文件夾。
運行以下命令,將
local_folder_or_file
復制到遠程服務器。put -r local_folder_or_file remote_folder_or_file
運行以下命令,將遠程服務器的
remote_folder_or_file
復制到本地。get -r remote_folder_or_file local_folder_or_file
斷開遠程ftp服務器
您可以輸入
quit
或者bye
斷開遠程ftp服務器連接。
通過scp工具傳輸文件
大部分Linux和Windows已經內置了scp工具,您無需進行安裝即可使用,SCP命令使用SSH來傳輸數據,并使用與SSH相同的認證模式,在需要進行驗證時會要求您輸入密碼或口令。
特點說明
scp的特點如下:
scp
類似于rcp
,它能夠保留特定文件系統上的文件屬性,并支持遞歸拷貝子目錄及其文件屬性。scp
具備更高的文件傳輸保密性。然而,其代價在于在傳輸過程中需要輸入密碼,并且涉及SSH的一些配置問題,這些因素均對其使用便利性產生影響。對于有特定需求的用戶而言,SCP是一種較為合適的傳輸工具。
參數說明
scp常用參數說明如下表所示:
參數 | 說明 |
-v | 詳細方式顯示輸出,可以用來調試連接、驗證或者配置問題 |
-B | 使用批處理模式(傳輸過程中不詢問傳輸口令或短語) |
-C | 在復制過程中壓縮文件或目錄 |
-P | 如果默認SSH端口不是22,則使用此選項指定SSH端口 |
-r | 遞歸復制整個目錄 |
-4 | 強制 |
-6 | 強制 |
使用示例
SCP的常用示例如下:
從本地復制目錄到遠程服務器
執行以下命令,將
local_file
復制至remote_ip
的remote_folder
中。scp -r local_file remote_username@remote_ip:remote_folder
從遠程服務器復制目錄到本地
執行以下命令,將
remote_ip
中的remote_folder
復制至local_file
中。scp -r remote_username@remote_ip:remote_folder local_file
通過rsync工具傳輸文件
rsync是一個用于Linux/Unix系統的文件同步和傳輸工具。它是RCP的替代工具,rsync可通過rsh或ssh協議進行操作,也可以以守護進程模式運行。
安裝說明
您需要在本地和遠程服務器上安裝rsync,rsync的安裝方式如下:
Alibaba Cloud Linux 3/2
sudo yum install -y rsync
CentOS 8/7/6
sudo yum install -y rsync
Ubuntu/Debian
sudo apt install -y rsync
參數說明
rsync常用參數說明如下表所示:
參數 | 說明 |
-v | 詳細模式輸出 |
-a | 歸檔模式,表示以遞歸的方式傳輸文件,并保持所有文件屬性不變,相當于使用了組合參數-rlptgoD |
-r | 對子目錄以遞歸模式處理 |
-l | 保留軟鏈接 |
-p | 保持文件權限 |
-t | 保持文件時間信息 |
-g | 保持文件屬組信息 |
-o | 保持文件屬主信息 |
-D | 保持設備文件信息 |
-H | 保留硬鏈結 |
-S | 對稀疏文件進行特殊處理以節省DST的空間 |
-z | 對備份的文件在傳輸時進行壓縮處理 |
使用示例
按照數據傳輸方式的不同,rsync可以分為本地傳輸方式,遠程傳輸方式以及守護程序傳輸方式,以下介紹不同的數據傳輸場景下的使用示例。
本地傳輸方式
執行以下命令,將本機的
local_folder_src
目錄復制至local_folder_dest
中。rsync -avSHP local_folder_src local_folder_dest
遠程傳輸方式
執行以下命令,將
local_folder_or_file_src
復制至remote_ip
的remote_folder_dest
中。rsync -avP local_folder_or_file_src remote_username@remote_ip:remote_folder_dest
執行以下命令,將
remote_ip
中的remote_folder_src
復制至local_folder_dest
中。rsync -avP remote_username@remote_ip:remote_folder_src local_folder_dest
執行以下命令,以顯示遠程主機
remote_ip
中remote_folder
目錄下的文件列表。rsync --list-only remote_username@remote_ip:remote_folder
守護程序傳輸模式
說明如需使用守護程序傳輸模式,您必須事先準備一臺已運行
rsync
守護程序的遠程主機。在守護進程模式下,
rsync
服務器會開放873端口,以等待客戶端連接。連接時,rsync
服務器會對口令進行驗證,若驗證通過,則可以進行文件傳輸。在首次連接完成后,系統會進行全量文件傳輸,此后的連接僅需進行增量備份。有關
rsync
守護程序傳輸模式配置文件的更多信息,請參見配置文件說明。
拷貝遠程rsync服務器(以
daemon
形式運行rsync
)的remote_folder_src
目錄到本地機local_folder_dest
中。rsync -av remote_username@remote_ip::module_name/remote_folder_src local_folder_dest
拷貝本地機器
local_folder_src
目錄文件到遠程rsync服務器(以daemon形式運行rsync)的remote_folder_dest
目錄中。rsync -av local_folder_src remote_username@remote_ip::module_name/remote_folder_dest
上述示例中使用到的變量說明如下:
local_folder_src:本地源目錄
local_folder_dest:本地目標目錄
local_folder_or_file_src:本地源目錄或文件
remote_username:遠程用戶名
remote_ip:遠程IP
remote_folder:遠程目錄
remote_folder_src:遠程源目錄
remote_folder_dest:遠程目標目錄
配置文件說明
rsync配置文件說明如下:
# 指定模塊傳輸文件的守護進程UID
uid = rsync
# 指定當模塊傳輸文件的守護進程GID
gid = rsync
# 端口號
port = 873
fake super = yes
# 使用chroot到文件系統中的目錄中
use chroot = no
# 最大并發連接數
max connections = 200
timeout = 600
# 忽略某些IO錯誤信息
ignore errors = true
list = false
log file = /var/log/rsyncd.log
[backup]
comment = welcome to rsync backup!
# 用來指定要備份的目錄
path = /backup
# 設置false,客戶端可以上傳文件,true是只讀
read only = false
# 設置false,客戶端可以下載,true不能下載
write only = no
# 連接用戶名,和linux系統用戶名無關系
auth users = rsync_backup
# 驗證密碼文件
secrets file = /etc/rsync.passwd
通過netcat工具傳輸文件
netcat
在網絡工具中被譽為“瑞士軍刀”,其功能強大,除了作為網絡工具外,其傳輸文件的能力也不容忽視。它能夠建立TCP連接、發送UDP數據包、對TCP和UDP端口進行掃描,并處理IPv4和IPv6數據包。
安裝說明
執行如下命令,以安裝netcat
。
Alibaba Cloud Linux 3/2
sudo yum install -y netcat
CentOS 8/7/6
sudo yum install -y netcat
Ubuntu/Debian
sudo apt install -y netcat
參數說明
netcat
常用參數說明如下表所示:
參數 | 說明 |
-C | 一直不斷連接 |
-g <網關> | 設置路由器躍程通信網關,最多可設置8個 |
-G <指向器數目> | 設置來源路由指向器,其數值為4的倍數 |
-i <延遲秒數> | 設置時間間隔,以便傳送信息及掃描通信端口 |
-l | 使用監聽模式,管控傳入的資料 |
-o <輸出文件> | 指定文件名稱,將傳輸的數據按指定文件名以16進制進行保存 |
-p <通信端口> | 設置本地主機使用的通信端口 |
-r | 指定本地與遠端主機的通信端口 |
-s <IP地址> | 本地源地址 |
-u | 使用UDP傳輸協議 |
-v | 顯示指令執行過程 |
-w <超時秒數> | 設置等待連線的時間 |
-z | 使用0輸入/輸出模式,只在掃描通信端口時使用 |
-n | 直接使用IP地址,而不通過域名服務器 |
使用示例
nc
是netcat
的簡寫,nc
的常用示例如下:
以下示例使用端口號為9999
,所以ECS實例所在安全組入方向需要開放9999
端口。您可以結合您的情況修改為您想使用的端口,具體操作,請參見添加安全組規則。
使用nc命令復制文件或目錄。以下示例演示如何將目錄或文件從
xxx.xxx.xxx.100
復制到xxx.xxx.xxx.200
。在
xxx.xxx.xxx.100
上:安裝pv
工具。說明當使用nc命令傳輸大文件或者目錄時,傳輸時間可能會較長,可以通過pv工具實時獲取傳輸進度。
Alibaba Cloud Linux 3/2
sudo yum install -y pv
CentOS 8/7/6
sudo yum install -y pv
Ubuntu/Debian
sudo apt install -y pv
在
xxx.xxx.xxx.200
上執行命令。nc -l 9999 | tar zxf -
在
xxx.xxx.xxx.100
上執行命令。tar czf - dir_or_file_need_to_be_transferred | pv | nc -N xxx.xxx.xxx.200 9999
說明示例使用的傳輸目錄為
dir_or_file_need_to_be_transferred
,請根據您的實際使用情況進行替換。結合tar命令傳輸目錄或文件時,有關文件讀寫權限需結合實際情況進行確認。
相關文檔
上傳文件至ECS后,您可以對重要文件進行備份。具體操作,請參見創建快照。
如需上傳本地文件至Windows ECS實例,請參見上傳或下載文件(Windows)。
您還可以通過對象存儲OSS來存儲和管理文件。詳細操作,請參見OSS快速入門。
如果您使用Workbench遠程連接至Linux實例,您可以通過Workbench可視化地管理Linux文件,包括文件的上傳和下載等操作。具體操作,請參見使用Workbench上傳或下載文件。