1. 程式人生 > >使用ssh keygen實現rsync免密鑰同步數據

使用ssh keygen實現rsync免密鑰同步數據

linux rsync 運維 ssh

總結:生成公鑰和私鑰,把公鑰推送到遠端,並生成authorized_keys公鑰驗證配置文件
rsync連接方式每次都需要輸入密碼;我們可以通過ssh keygen的公私鑰機制來實現ssh連接時認證(做定時任務時,可能需要用到)。
1、服務器添加用戶Ricky,並在家目錄下創建.ssh目錄(rsync服務端)

[root@backup ~]#useradd Ricky
[root@backup ~]# mkdir /home/Ricky/.ssh
.ssh目錄用來存放公鑰驗證文件

2、在客戶端使用ssh-keygen生成私鑰與公鑰(rsync客戶端)

[root@nfs01 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /usr/rsync_id_dsa #為避免覆蓋root的id_rsa,把私鑰放到/usr/rsync_id_dsa
Enter passphrase (empty for no passphrase): #回車就行,空表示沒有密碼
Enter same passphrase again: #回車
Your identification has been saved in /usr/rsync_id_dsa.
Your public key has been saved in /usr/rsync_id_dsa.pub.#生成公鑰
The key fingerprint is:
8a:97:ca:71:ee:99:96:3c:1e:d6:cd:76:a7:3d:69:e0 root@nfs01
The key‘s randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|        S        |
|     . + o  .    |
|    o.B.. +..... |
|   . B=+ . .E++  |
|    o+*.    .... |
+-----------------+
You have new mail in /var/spool/mail/root

3、把客戶端生成的公鑰推送到服務端
因為使用的Ricky用戶進行驗證,所以放到/home/Rikcy/.ssh目錄下

[root@nfs01 ~]# scp /usr/rsync_id_dsa.pub [email protected]:/home/Ricky/.ssh
[email protected]‘s password: 
rsync_id_dsa.pub                                    100%  392     0.4KB/s   00:00   

也可以使用搭建好的rsync服務推送,還是需要輸入密碼

[root@nfs01 ~]# rsync /usr/rsync_id_dsa.pub [email protected]:/home/Ricky/.ssh
[email protected]‘s password: 
[root@nfs01 ~]#

4、到服務端上把公鑰存放到authorized_keys配置文件中
這是ssh key驗證時訪問的公鑰所在的配置文件。authorized_keys是不存在的,直接下面的命令就可以創建了。

[root@backup .ssh]# cat rsync_id_dsa.pub > authorized_keys
[root@backup .ssh]# chown Ricky:Ricky authorized_keys #修改該文件的屬主與屬組,讓其成為Ricky的配置文件  

5、使用rsync ssh –i 進行推送
ssh的-i參數:指定自身的私鑰,並與遠端的用戶的公鑰進行驗證,驗證通過則建立ssh連接進行數據交換,否則拒絕連接。

[root@nfs01 ~]# rsync -avzP -e ‘ssh -p 22 -i /usr/rsync_id_dsa‘ /etc/hosts [email protected]:/tmp/
sending incremental file list
hosts
         311 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)
rsync: mkstemp "/tmp/.hosts.qlgEix" failed: Permission denied (13)

sent 189 bytes  received 31 bytes  440.00 bytes/sec
total size is 311  speedup is 1.41
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]

這裏推送數據失敗,的原因是backup備份服務器上的/tmp/對於Ricky用戶來說沒有權限。

[root@backup Ricky]# ls -ld /tmp
drwxr-xr-x. 2 root root 4096 5月  17 02:36 /tmp

重新創建一個Ricky的目錄,用來接收數據

[root@backup ~]# mkdir /ricky
[root@backup ~]# chown Ricky:Ricky /ricky/  
[root@backup ~]# ls -ld /ricky/           
drwxr-xr-x 2 Ricky Ricky 4096 5月  17 02:43 /ricky/
[root@backup ~]# 
[root@nfs01 ~]# rsync -avzP -e ‘ssh -i /usr/rsync_id_dsa‘ /etc/hosts [email protected]:/ricky/ 
sending incremental file list 無需輸入密碼
hosts
         311 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)

sent 189 bytes  received 31 bytes  440.00 bytes/sec
total size is 311  speedup is 1.41
You have new mail in /var/spool/mail/root
[root@nfs01 ~]# 
[root@backup ~]# ls /ricky/
hosts
[root@backup ~]#

註意:一定要確保對應的文件和目錄,訪問的用戶是具有權限的,否則驗證不能通過,或者推送無訪問權限被拒絕。

使用ssh keygen實現rsync免密鑰同步數據