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
在伺服器端啟動
$sudo rsync --daemon --config=/.../.../rsync.conf # 如果不指定配置檔案,預設為/etc/rsync.conf
檢視 rsync --daemon 的運作
$ps -ef | grep rsync
關閉 rsync --daemon 的運作
$ kill 9769
檢視端口
$netstat -lnp | grep LISTEN | grep tcp
在用戶端進行同步
$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