天天看點

rsync 使用ssh協定免密

rsync遠端傳輸避免密碼輸入

每次rsync遠端傳輸時都需要輸入使用者在遠端機器上的密碼,這樣導緻無法在背景自動運作rsync,可采用秘鑰檔案來替代人工輸入密碼的方式來解決。

第一步 在本地機器上使用ssh-keygen -t rsa 生成秘鑰(一路回車即可)

1 [root@xxxx ~]$ ssh-keygen -t rsa
2 Generating public/private rsa key pair.
3 Enter file in which to save the key (/root/.ssh/id_rsa): /usr/rsync_id_dsa
4 Enter passphrase (empty for no passphrase):   //輸入空
5 Enter same passphrase again:   //輸入空
6 Your identification has been saved in /usr/rsync_id_dsa.
7 Your public key has been saved in /usr/rsync_id_dsa.pub.
8 
9 注意: 在提示輸入key file path時,為避免覆寫已有的root帳戶的id_rsa檔案,将其存儲到/usr/rsync_id_dsa 在提示輸入檔案密碼時,直接按回車,采用空密碼 最後生成了兩個檔案,分别存儲私鑰和公鑰           

第二步 将本地機器上的公鑰傳送到遠端機器對應賬戶的.ssh目錄下 (以csdn為例)

1 $ scp /usr/rsync_id_dsa.pub [email protected]:/home/csdn/.ssh           

第三步 在遠端機器上将得到的公鑰導入對應賬号的authorized_keys檔案中 (以csdn為例)

1 $ cd /home/csdn/.ssh
2 $ cat rsync_id_dsa.pub >> authorized_keys  # 使用 >> 防止覆寫 這樣可以實作多個用戶端的免密碼登入
3 $ chown csdn:csdn authorized_keys  # 不是必須           

設定完成後,每次使用rsync時,添加 -i 參數 就可以避免每次輸入密碼了

1 $rsync -e "ssh -i /usr/rsync_id_dsa" /tmp/testfile csdn@remotehost:/tmp/  
2 #rsync -av -e  "ssh -i /usr/rsync_id_dsa" /orcl/20160926/ [email protected]:/usr/test           

如果 -i 參數也想省略 (使用如下步驟)

user$ ssh-keygen -t rsa
一路回車...
切換目錄到 .ssh下 可以看到生成的公共秘鑰檔案 id_rsa.pub 将該檔案發送到遠端機器上
user$ scp -P 8000 id_rsa.pub [email protected]:/home/userNamae/.ssh/id_rsa.pub_test
登入遠端機器,将 id_rsa.pub_test 的内容追加到 authorized_keys, 使用追加的方式是為了不覆寫其他遠端機器的公共秘鑰
$ cat id_rsa.pub_test >> authorized_keys
測試能否無密碼登入
user$ ssh [email protected]           

rsync --deamon 模式

伺服器端:隻有一個,放置 rysncd.conf 預設的位置 /etc/rsyncd.conf
用戶端:有多個,放置密碼檔案           

使用 rsync --daemon 的步驟

第一步 在伺服器端編寫 rsync.conf,位置任意,預設為 /etc/rsync.conf
第二步 在伺服器端編寫使用者的賬号密碼檔案(即rsyncd.secrets) 權限必須是600
第三步 啟動 sudo rsync --daemon
第三步 如果想無密碼傳輸,在用戶端編寫相應使用者的密碼檔案(即rsync.passwd)  權限必須是600
第四步 在用戶端使用 rsync 進行傳輸 指定子產品和密碼檔案           

rsyncd.conf 配置檔案的格式

1)rsyncd.conf配置檔案由子產品和參數組成,一個子產品以寫在方括号裡的子產品名稱開始,直到下一個子產品,子產品裡包含由“name = value”格式的參數。
2)檔案是基于行的,每一行代表一個子產品名或者參數
------------------------ 一個配置檔案的例子 -------------------------------------
# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:
# port = 873 預設端口
uid = root
gid = root
use chroot = no
max connections = 4
pid file = /home/leo/rsyncDaemon/rsyncd.pid
log file = /home/leo/rsyncDaemon/rsyncd.log
lock file = /home/leo/rsyncDaemon/rsyncd.lock
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# [ftp]
#        path = /home/ftp
#        comment = ftp export area

[test1]
path = /home/leo/rsyncDaemon1/
read only = no
list = true
auth users = rsync
secrets file = /home/leo/rsyncDaemon/rsyncd.secrets
list = no

           
[test2]
path = /home/leo/rsyncDaemon2/
read only = no
list = true
auth users = rsync
secrets file = /home/leo/rsyncDaemon/rsyncd.secrets
list = no           
rsync 使用ssh協定免密

在伺服器端啟動

$sudo rsync --daemon --config=/.../.../rsync.conf # 如果不指定配置檔案,預設為/etc/rsync.conf           

檢視 rsync --daemon 的運作

$ps -ef | grep rsync           
rsync 使用ssh協定免密

關閉 rsync --daemon 的運作

$ kill 9769           

檢視端口

$netstat -lnp | grep LISTEN | grep tcp           
rsync 使用ssh協定免密

在用戶端進行同步

$rsync -avzP --port=端口号 ./testFile.txt  rsync@1*2.16.157.155::test1  --password-file=rsync.passwd  # 将本地用戶端的檔案推到伺服器端 使用test1子產品的配置
$rsync -avzP ./testFile.txt  rsync@1*2.16.157.155::test2  --password-file=rsync.passwd  # 将本地用戶端的檔案推到伺服器端 使用test2子產品的配置
$rsync -avzP rsync@1*2.16.157.155::test1 ./  --password-file=rsync.passwd  # 将伺服器端的資料拉到本地用戶端           

注意事項:

-- rsync --daemon 開啟需要管理者權限

-- 端口是否開啟,預設是873,使用 netstat 指令檢視端口資訊

-- 防火牆問題,使用 iptables 修改防火牆允許的通路端口

rsync 加密傳輸

使用 ssh -c 參數指定加密算法

rsync -azrP -e "ssh -c aes256-ctr -p 2020" filename [email protected]:/home/leo/           

文章來源:https://www.cnblogs.com/0820LL/p/9627047.html

繼續閱讀