當您需要為Elastic Compute Service進行軟體部署、資料備份和恢複、資料匯入和匯出等操作時,您可以使用類Unix/Linux平台上常用的檔案傳輸工具實現。本文通過介紹檔案傳輸的基本原理,以及常用的NETCAT、SCP和Rsync檔案傳輸工具,您可以根據實際需要選擇合適的檔案傳輸工具。
檔案傳輸原理
檔案傳輸是資訊傳輸的一種形式,它是在資料來源和資料宿之間傳送檔案資料的過程,也稱為檔案資料通訊。作業系統把檔案資料提取到記憶體中做暫存,再複製到目的地,加密是在檔案外加了一個殼,檔案本身仍然是一個整體,複製只是把這個整體轉移到其他地方,不需要解密,只有在開啟壓縮包時才需要解密。在資料轉送過程中,您需要注意:
一個大檔案作為一個資料整體,是不可能瞬間從一台主機轉移到其他主機的,傳輸是一個持續的過程,但不是把檔案分割了,因此,如果在傳輸的過程中意外中斷,目標主機的路徑中不會有該檔案。
如果傳輸的是多個檔案,那麼這些檔案將會按順序分別傳輸,如果傳輸過程發生中斷,則正在傳輸的檔案會傳輸失敗,但不會影響已經傳完的檔案(如果傳輸的是檔案壓縮包,則無論壓縮包中有幾個檔案,該壓縮包均會被視為一個檔案)。
通常我們看到的諸如NETCAT、SCP、Rsync等都是可以用來傳輸檔案資料的工具,下面我們將詳細介紹主要檔案傳輸工具的特點以及用法。
NETCAT
NETCAT在網路工具中有“瑞士軍刀”的美譽,它功能強大,作為網路工具的同時,它傳輸檔案的能力也不容小覷。它可以建立TCP串連、發送UDP資料包、對TCP和UDP連接埠進行掃描、處理IPv4和IPv6資料包。
參數說明
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的常用樣本如下:
連接埠掃描21~24(以IP192.168.2.34為例)。
nc -v -w 2 192.168.2.34 -z 21-24
返回樣本:
nc: connect to 192.168.2.34 port 21 (tcp) failed: Connection refused Connection to 192.168.2.34 22 port [tcp/ssh] succeeded! nc: connect to 192.168.2.34 port 23 (tcp) failed: Connection refused nc: connect to 192.168.2.34 port 24 (tcp) failed: Connection refused
從192.168.2.33拷貝檔案到192.168.2.34。
在192.168.2.34上:
nc -l 1234 > test.txt
在192.168.2.33上:
nc 192.168.2.34 < test.txt
用NC命令操作memcached。
儲存資料:
printf “set key 0 10 6rnresultrn” |nc 192.168.2.34 11211
擷取資料:
printf “get keyrn” |nc 192.168.2.34 11211
刪除資料:
printf “delete keyrn” |nc 192.168.2.34 11211
查看狀態:
printf “statsrn” |nc 192.168.2.34 11211
類比top命令查看狀態:
watch “echo stats” |nc 192.168.2.34 11211
清空緩衝:
printf “flush_allrn” |nc 192.168.2.34 11211 #謹慎操作,清空了緩衝就沒了
SCP
SCP(Secure Copy)即安全拷貝,是一種在兩個伺服器(本地與本地、本地與遠程、遠程與遠程)之間安全地進行檔案傳輸的方法,它以SSH協議為基礎。SCP命令的用法和RCP命令格式非常類似,一般推薦使用SCP命令,因為它比RCP更安全。
更多SCP資訊,請參見通過SFTP/SCP上傳或下載檔案(本地主機為Linux或macOS)。
SCP在需要進行驗證時會要求您輸入密碼或口令。
SCP命令使用SSH來傳輸資料,並使用與SSH相同的認證模式,提供同樣的安全保障。
SSH是目前較可靠的、為遠程登入工作階段和其他網路服務提供安全性的協議,利用SSH協議可以有效防止遠端管理過程中的資訊泄露問題。SCP是基於SSH的應用,所以進行資料轉送的機器上必須支援SSH服務。
特點說明
SCP的特點如下:
SCP類似於RCP,它能夠保留一個特定檔案系統上的檔案屬性,能夠保留檔案屬性或者需要遞迴地拷貝子目錄。
SCP具備更好的檔案傳輸保密性。與此同時,付出的代價就是檔案傳輸時需要輸入密碼,而且涉及到SSH的一些配置問題,這些都影響其使用的方便性,對於有特定需求的使用者來說,它是比較合適的傳輸工具。
參數說明
SCP常用參數說明如下表所示:
參數 | 說明 |
-v | 詳細方式顯示輸出,可以用來調試串連、驗證或者配置問題 |
-B | 使用批處理模式(傳輸過程中不詢問傳輸口令或短語) |
-C | 在複製過程中壓縮檔或目錄 |
-P | 如果預設SSH連接埠不是22,則使用此選項指定SSH連接埠 |
-r | 遞迴複製整個目錄 |
-4 | 強制SCP命令只使用IPv4地址 |
-6 | 強制SCP命令只使用IPv6地址 |
常用樣本
SCP的常用樣本如下:
產生RSA類型的密鑰
使用SCP命令時,需要輸入密碼,如果不想每次都輸入,可以通過配置SSH,這樣在兩台機器之間拷貝檔案時不需要每次都輸入使用者名稱和密碼。
上述命令產生RSA類型的密鑰。在提示密鑰的儲存路徑和密碼時,可以直接斷行符號使用預設路徑和空密碼。這樣,產生的公用密鑰儲存在/.ssh/id_rsa.pub,私人密鑰儲存在 /.ssh/id_rsa。然後把這個金鑰組中的公用密鑰的內容複寫到要訪問的機器上的/.ssh/authorized_keys檔案中。這樣,下次再訪問那台機器時,就不用輸入密碼了。
在兩台Linux主機間複製檔案
命令基本格式:
scp [選擇性參數] file_source file_target
從本地複製檔案到遠程伺服器(如下四種方式)
序號
命令
指定使用者名稱和密碼
指定遠程目錄或具體的檔案名稱
1
scp local_file remote_username@remote_ip:remote_folder
指定遠程主機的使用者名稱,則執行命令後需要再輸入密碼。
指定了遠端目錄,命令執行後會將本地檔案複製到遠程指定的目錄下。
2
scp local_file remote_username@remote_ip:remote_file
指定遠程主機的使用者名稱,則執行命令後需要再輸入密碼。
指定了具體的檔案名稱,命令執行後會將本地檔案複製到遠程主機上,且命名為指定的檔案名稱。
3
scp local_file remote_ip:remote_folder
未指定遠程主機的使用者名稱,則執行命令後需要輸入使用者名稱和密碼。
指定了遠端目錄,命令執行後會將本地檔案複製到遠程指定的目錄下。
4
scp local_file remote_ip:remote_file
未指定遠程主機的使用者名稱,則執行命令後需要輸入使用者名稱和密碼。
指定了具體的檔案名稱,命令執行後會將本地檔案複製到遠程主機上,且命名為指定的檔案名稱。
以使用第4條命令,將本地test.txt檔案複製到遠程主機(公網IP地址為:120.XXX.XXX.XXX)並命名為test02.txt為例,操作如下:
在本地主機上執行
scp test.txt 120.XXX.XXX.XXX:test02.txt
命令,然後根據提示輸入遠程主機的登入密碼。在遠程主機上查看檔案。
您可以在遠程主機上看到複製成功的test02.txt檔案。
從遠程伺服器複製檔案到本地
從遠程複製到本地,只要將從本地複製到遠端命令的後2個參數調換順序即可。
scp remote_username@remote_ip:remote_folder local_file
在兩台Linux主機間複製目錄
命令基本格式:
scp -r file_source file_target
從本地複製目錄到遠程伺服器(如下兩種方式)
指定遠程主機的使用者名稱,則執行命令後需要再輸入密碼:
scp -r local_file remote_username@remote_ip:remote_folder
未指定遠程主機的使用者名稱,則執行命令後需要輸入使用者名稱和密碼:
scp -r local_file remote_ip:remote_folder
從遠程伺服器複製目錄到本地
從遠程複製到本地,只要將從本地複製到遠端命令的後2個參數調換順序即可。
scp -r remote_username@remote_ip:remote_folder local_file
Rsync
Rsync是Linux/Unix檔案同步和傳送工具。用於替代RCP的一個工具,Rsync可以通過rsh或ssh使用,也能以daemon模式去運行,在以daemon方式運行時,Rsync server會開啟一個873連接埠,等待用戶端去串連。串連時Rsync server會檢查口令是否相符,若通過口令驗證,則可以進行檔案傳輸,第一次連通完成時,會把整份檔案傳輸一次,以後則只需進行增量備份。
安裝說明
您需要在本地和遠程伺服器上安裝Rsync,Rsync的安裝方式如下:
可以使用每個發行版本內建的安裝包管理器進行安裝。
sudo apt-get install rsync #在debian、ubuntu 等線上安裝方法;
slackpkg install rsync #Slackware 軟體包線上安裝;
源碼編譯安裝:
wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
tar xf rsync-3.0.9.tar.gz
cd rsync-3.0.9
./configure && make && make install
參數說明
Rsync常用參數說明如下表所示:
參數 | 說明 |
-v | 詳細模式輸出 |
-a | 歸檔模式,表示以遞迴的方式傳輸檔案,並保持所有檔案屬性不變,相當於使用了組合參數-rlptgoD |
-r | 對子目錄以遞迴模式處理 |
-l | 保留軟連結 |
-p | 保持檔案許可權 |
-t | 保持檔案時間資訊 |
-g | 保持檔案屬組資訊 |
-o | 保持檔案屬主資訊 |
-D | 保持裝置檔案資訊 |
-H | 保留硬鏈結 |
-S | 對疏鬆檔案進行特殊處理以節省DST的空間 |
-z | 對備份的檔案在傳輸時進行壓縮處理 |
工作模式
Rsync有以下六種不同的工作模式:
拷貝本地檔案,將/home/coremail目錄下的檔案拷貝到/cmbak目錄下。
rsync -avSH /home/coremail/ /cmbak/
拷貝本地機器的內容到遠程機器。
rsync -av /home/coremail/ 192.168.11.12:/home/coremail/
拷貝遠程機器的內容到本地機器。
rsync -av 192.168.11.11:/home/coremail/ /home/coremail/
拷貝遠程Rsync伺服器(daemon形式運行Rsync)的檔案到本地機。
rsync -av root@172.16.78.192::www /databack
拷貝本地機器檔案到遠程Rsync伺服器(daemon形式運行rsync)中。當DST路徑資訊包含
::
分隔字元時,啟動該模式。rsync -av /databack root@172.16.78.192::www
顯示遠程機器的檔案清單。這類似於Rsync傳輸,不過只要在命令中省略掉本地機器資訊即可。
rsync -v rsync://192.168.11.11/data
設定檔說明
Rsync設定檔說明如下:
cat /etc/rsyncd.conf #內容如下
port = 873 #連接埠號碼
uid = nobody #指定當模組傳輸檔案的守護進程UID
gid = nobody #指定當模組傳輸檔案的守護進程GID
use chroot = no #使用chroot到檔案系統中的目錄中
max connections = 10 #最大並發串連數
strict modes = yes #指定是否檢查口令檔案的許可權
pid file = /usr/local/rsyncd/rsyncd.pid #指定PID檔案
lock file = /usr/local/rsyncd/rsyncd.lock #指定支援max connection的鎖檔案,預設為/var/run/rsyncd.lock
motd file = /usr/local/rsyncd/rsyncd.motd #定義伺服器資訊的,自己寫 rsyncd.motd 檔案內容
log file = /usr/local/rsyncd/rsync.log #rsync 伺服器的日誌
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[conf] #自訂模組
path = /usr/local/nginx/conf #用來指定要備份的目錄
comment = Nginx conf
ignore errors #可以忽略一些IO錯誤
read only = no #設定no,用戶端可以上傳檔案,yes是唯讀
write only = no #no為用戶端可以下載,yes不能下載
hosts allow = 192.168.2.0/24 #可以串連的IP
hosts deny = * #禁止串連的IP
list = false #客戶請求時,使用模組列表
uid = root
gid = root
auth users = backup #串連使用者名稱,和linux系統使用者名稱無關係
secrets file = /etc/rsyncd.pass #驗證密碼檔案
相關文檔
您可以使用SFTP來傳輸檔案,具體操作,請參見通過SFTP/SCP上傳或下載檔案(本地主機為Linux或macOS)。
如果您使用Workbench遠端連線Linux執行個體,則您可以通過Workbench可視化地管理Linux檔案,包括上傳檔案和下載檔案等。具體操作,請參見使用Workbench上傳或下載檔案。