scp與rsync

##scp -- secure copy (remote file copy program) scp = cp + ssh,經過ssh協議將與遠程主機互相拷貝文件。shell

  • 使用方法
    scp 選項 file_source file_target
    對於遠程路徑,要使用user@remote_ip:file的形式(固然若是你在遠程主機上使用了ssh key能夠省略)例如:
    scp /home/wgjak47/A.md test@192.168.199.15:/tmp/B.md安全

  • 關於選項 scp的複製選項比cp要少一些,只有遞歸複製和保留原屬性,例如你但願複製目錄並且保留源文件的權限,時間等信息,可使用-r和-p選項: scp -rp /home/wgjak47/secret test@192.168.199.15:/home/test/backup scp同時也有一部分與ssh的相同的選項。例如能夠指定遠程主機的ssh端口: scp -rp -P 3307 /home/wgjak47/secret test@192.168.199.15:/home/test/backup服務器

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

##rsync remote synchronize,即遠程同步。rsync主要用來進行鏡像,在同步文件時能夠保持原來文件的權限、時間、軟硬連接等附加信息。socket

###rsync服務端tcp

  1. 首先安裝rsync:
    sudo apt-get install rsync

2.在rsync的服務端須要配置rsync服務,涉及到如下三個文件:ui

  • rsyncd.conf(主配置文件) 默認位於/etc下,若是沒有請從/usr/share/doc/rsync/example/處複製樣例文件到/etc下。 cp /usr/share/doc/rsync/example/rsyncd.conf /etc/

# sample rsyncd.conf configuration filethis

# 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):
  1. 編輯/etc/defalult/rsync,修改RSYNC_ENABLE=true

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

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

  4. 啓動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 wgjak47@192.168.145.5:: 列出可用模塊

  • rsync --list-sonly wgjak47@192.168.145.5::ftp
    查看ftp下的文件

  • rsync -avzP wgjak47@192.168.145.5::ftp tmp 用root用戶登陸到服務器上,把test數據,同步到本地當前目錄test上。固然本地的目錄是能夠你本身定義的。若是當你在客戶端上當前操做的目錄下沒有test這個目錄時,系統會自動爲你建立一個;當存在test這個目錄中,你要注意 它的寫權限。若是加上了--delete選項,同步過程當中會將遠程主機已經刪除,可是本地仍然存在的文件刪除。

相關文章
相關標籤/搜索