今天上午同事問我 算法
rsync -av /SRC root@172.17.256.211:36000::/DEST
爲什麼報 port 22 refused 的錯誤?
由於咱們機器都是修改了 ssh 端口的,默認22端口是登陸不上ssh的,
同事的本意是想修改rsync的傳輸端口,但這條語句卻寫錯了,錯誤有2處:
雙冒號 :: 和 port 格式指定錯誤,
(1)雙冒號 「::」的用法:
rsync 傳輸文件前須要登陸認證,那麼這個過程用到的協議有兩種:ssh 和 rsync
什麼時候用ssh 協議呢?
咱們平時用的 rsync -av /SRC root@172.17.256.211:/DEST 就是默認用的 ssh 協議
這種方式默認是省略了 -e ssh 的,與下面等價: shell
rsync -av /SRC -e ssh root@172.17.256.211:/DEST
當遇到要修改端口的時候,咱們能夠: segmentfault
rsync -av /SRC -e "ssh -p36000" root@172.17.256.211:/DEST
什麼時候用rysnc協議呢? 安全
rsync -av /SRC rsync://root@172.17.256.211:36000/modual/DestPath
注意:這條語句顯示的指明瞭使用rsync認證協議,port後的modual是rsync服務端配置文件rsyncd.conf
裏面配置的模塊名,模塊裏面會包含一些用戶名、密碼、路徑等認證信息。
使用rsync認證,還有一種寫法: 服務器
rsync -av /SRC --port=36000 root@172.17.256.211::modual/DestPath
注意:這種寫法不需顯示指定 rsync 協議,而是根據 :: 來識別的,端口本身用 --port 指定。
並且這裏 modual 前面沒有 / 的。
總結:
雙冒號:: 是用在 rsync 協議裏面的,: 通常用在ssh協議裏面,這兩種用法各有千秋:
rsync協議你須要在rsync服務端配置模塊,這增長了運維工做量,可是安全,由於不須要對客戶公開服務器賬號密碼。
ssh協議方便,不需配置,拿到服務器賬號密碼便可開工,可是對客戶是暴露的,有安全風險。
還須要注意的是用rsync協議認證的時候,後面跟的是模塊名,而不是路徑,這點要注意。
(2)關於 rsync --port 的man文檔以下:
rsync 客戶端 --port
--port=PORT
This specifies an alternate TCP port number to use rather than
the default of 873. This is only needed if you are using the
double-colon (::) syntax to connect with an rsync daemon (since
the URL syntax has a way to specify the port as a part of the
URL).
rsync 服務端 --port
--port=PORT
This specifies an alternate TCP port number for the daemon to
listen on rather than the default of 873. See also the "port"
global option in the rsyncd.conf manpage.
(3)附一些參考文檔:
rsync實例用法及參數詳解
rsync命令用法入門
rsync 的核心算法
http://hi.baidu.com/leejun_2005/item/11651fc379229f52bdef69b7 運維
Linux下同步工具inotify+rsync使用詳解 ssh
http://segmentfault.com/blog/seanlook/1190000002427568 工具