歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> scp與rsync

scp與rsync

日期:2017/2/27 15:56:50   编辑:Linux教程
scp – secure copy (remote file copy program)
scp = cp + ssh,通過ssh協議將與遠程主機互相拷貝文件。

使用方法
scp 選項 file_source file_target
對於遠程路徑,要使用user@remote_ip:file的形式(當然如果你在遠程主機上使用了ssh key可以省略)例如:
scp /home/wgjak47/A.md [email protected]:/tmp/B.md

關於選項
scp的復制選項比cp要少一些,只有遞歸復制和保留原屬性,例如你希望復制目錄而且保留源文件的權限,時間等信息,可以使用-r和-p選項:
scp -rp /home/wgjak47/secret [email protected]:/home/test/backup
scp同時也有一部分與ssh的相同的選項。例如可以指定遠程主機的ssh端口:
scp -rp -P 3307 /home/wgjak47/secret [email protected]:/home/test/backup

關於速度,由於使用了加密,相比tftp等簡單文件傳輸協議要慢,但是並不嚴重。

rsync
remote synchronize,即遠程同步。rsync主要用來進行鏡像,在同步文件時可以保持原來文件的權限、時間、軟硬鏈接等附加信息。
rsync服務端
首先安裝rsync:
sudo apt-get install rsync

2.在rsync的服務端需要配置rsync服務,涉及到以下三個文件:
rsyncd.conf(主配置文件)
默認位於/etc下,如果沒有請從/usr/share/doc/rsync/example/處復制樣例文件到/etc下。
cp /usr/share/doc/rsync/example/rsyncd.conf /etc/
# sample rsyncd.conf configuration file

# GLOBAL OPTIONS

#motd file=/etc/motd
#log file=/var/log/rsyncd
# for pid file, do not use /var/run/rsync.pid if
# you are going to run rsync out of the init.d script.
# The init.d script does its own pid file handling,
# so omit the “pid file” line completely in that case.
# pid file=/var/run/rsyncd.pid
#syslog facility=daemon
#socket options=

# MODULE OPTIONS

[ftp] #認證的模塊名,client使用時指定

comment = public archive
path = /var/www/pub # 需要同步的目錄
use chroot = yes # 同步前先chroot到同步目錄,安全考慮。
# max connections=10
lock file = /var/lock/rsyncd
# the default for read only is yes…
read only = yes
list = yes
uid = nobody #傳輸文件使用的用戶
gid = nogroup #傳輸文件使用的組別,一定要確認這的用戶和用戶組能夠讀取path下的文件。
# exclude =
# exclude from =
# include =
# include from =
# auth users = #認證的用戶名,如果沒有這行,則表明是匿名
# secrets file = /etc/rsyncd.secrets ## 認證密碼文件
strict modes = yes
# hosts allow = #允許訪問的hosts
# hosts deny = #進制訪問的hosts,與前面2選1
ignore errors = no #忽略一些
ignore nonreadable = yes
transfer logging = no # 記錄傳輸日志
# log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
timeout = 600 #超時
refuse options = checksum dry-run
dont compress = .gz .tgz .zip .z .rpm .deb .iso .bz2 *.tbz #傳輸時不壓縮以節省時間。
更多詳細選項可以參閱man page:man rsyncd.conf

rsyncd.secrets(密碼文件)
密碼文件可以自己指定,默認在/etc/rsyncd.secrets。格式為用戶名:密碼
例如:

wgjak47:thisispwd

文件權限要設定為600,防止密碼洩露。

rsyncd.motd(rysnc服務器信息)
它是定義rysnc服務器信息的,也就是用戶登錄信息。比如讓用戶知道這個服務器是誰提供的等;例如:

  ++++++++++++++++++++++++++++++++++++++++++++++
   Welcome to use my rsync services!
  ++++++++++++++++++++++++++++++++++++++++++++++

啟用rsync服務(Debian):

編輯/etc/defalult/rsync,修改RSYNC_ENABLE=true

打通防火牆端口:
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT

啟用rsync服務(update-rc.d,開機自動啟動)
update-rc.d rsync start 20 2 3 4 5

啟動rsync服務
service rsync start

客戶端

客戶端可以使用rsync命令來從服務器同步文件。
rsync的命令格式可以為:

rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST
使用一個遠程shell程序(如rsh、ssh)來實現將本地機器的內容拷貝到遠程機器。當DST路徑地址包含單個冒號”:“分隔符時啟動該模式。
rsync [OPTION]… [USER@]HOST:SRC DEST
使用一個遠程shell程序(如rsh、ssh)來實現將遠程機器的內容拷貝到本地機器。當SRC地址路徑包含單個冒號”:“分隔符時啟動該模式。
rsync [OPTION]… SRC [SRC]… DEST
拷貝本地文件;當SRC和DES路徑信息都不包含有單個冒號”:“分隔符時就啟動這種工作模式。
rsync [OPTION]… [USER@]HOST::SRC [DEST]
從遠程rsync服務器中拷貝文件到本地機。當SRC路徑信息包含”::“分隔符時啟動該模式。
rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST
從本地機器拷貝文件到遠程rsync服務器中。當DST路徑信息包含”::“分隔符時啟動該模式。
rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]
列遠程機的文件列表。這類似於rsync傳輸,不過只要在命令中省略掉本地機信息即可。

選項:
-r 是遞歸
-l 是鏈接文件,意思是拷貝鏈接文件;-p 表示保持文件原有權限;-t 保持文件原有時間;-g 保持文件原有用戶組;-o 保持文件原有屬主;-D 相當於塊設備文件;
-a, –archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rlptgoD
-z 傳輸時壓縮;
-P 傳輸進度;
-v 傳輸時的進度等信息,和-P有點關系,自己試試。可以看文檔;
-e ssh的參數建立起加密的連接。
-u只進行更新,防止本地新文件被重寫,注意兩者機器的時鐘的同時
–progress是指顯示出詳細的進度情況
–delete是指如果服務器端刪除了這一文件,那麼客戶端也相應把文件刪除,保持真正的一致
–password-file=/password/path/file來指定密碼文件,這樣就可以在腳本中使用而無需交互式地輸入驗證密碼了,這裡需要注意的是這份密碼文件權限屬性要設得只有屬主可讀。
樣例:
rsync --list-only [email protected]::
列出可用模塊

rsync --list-sonly [email protected]::ftp
查看ftp下的文件

rsync -avzP [email protected]::ftp tmp
用root用戶登錄到服務器上,把test數據,同步到本地當前目錄test上。當然本地的目錄是可以你自己定義的。如果當你在客戶端上當前操作的目錄下沒有test這個目錄時,系統會自動為你創建一個;當存在test這個目錄中,你要注意 它的寫權限。如果加上了–delete選項,同步過程中會將遠程主機已經刪除,但是本地仍然存在的文件刪除。
Copyright © Linux教程網 All Rights Reserved