SSH實現雙向認證


SSH實現雙向認證

由於經常需要使用scp在兩台機器間拷貝文件,每次都輸入密碼太麻煩,於是按下面的步驟配置了一下,再使用ssh或scp登錄遠程機器時就不需輸入密碼了:

A主機:192.168.100.82
B主機:192.168.100.83

Linux/Unix雙機建立信任

1.在A機生成證書

在A機root用戶或其他用戶下執行ssh-keygen命令,在需要輸入的地方,直接回車,生成建立安全信任關系的證書。

[root@localhost ~]#ssh-keygen -t rsa

注意:在程序提示輸入passphrase時直接輸入回車,表示無證書密碼。
上述命令將生成私鑰證書id_rsa和公鑰證書id_rsa.pub,存放在用戶家目錄的.ssh子目錄中.

2.查看~/.ssh生成密鑰的文件

[root@localhost ~]# ll /root/.ssh/
total 8
-rw------- 1 root root 1675 Apr 27 15:55 id_rsa
-rw-r--r-- 1 root root  400 Apr 27 15:55 id_rsa.pub

3.A對B建立信任關系

將A主機的公鑰證書id_rsa.pub復制到機器B主機的root家目錄的.ssh子目錄中,同時將文件名更換為authorized_keys,此時需要輸入B主機的root用戶密碼(還未建立信任關系)。建立了客戶端到服務器端的信任關系后,客戶端就可以不用再輸入密碼,就可以從服務器端拷貝數據了。

scp -r -P 22 /root/.ssh/id_rsa.pub root@192.168.100.83:/root/.ssh/authorized_keys

如果做單向認證,這里已經可以實現A到B的免秘鑰上傳下載了.

4.B對A建立信任關系

在B機上執行同樣的操作,建立B對A的信任關系。

[root@localhost ~]#ssh-keygen -t rsa
root@localhost ~]# ll /root/.ssh/
total 8
-rw-r--r-- 1 root root 1678 Apr 27 15:59 authorized_keys
-rw------- 1 root root 1675 Apr 27 15:55 id_rsa
-rw-r--r-- 1 root root  400 Apr 27 15:55 id_rsa.pub

將B主機的公鑰證書id_rsa.pub復制到機器A主機的root家目錄的.ssh子目錄中,同時將文件名更換為authorized_keys

scp -r -P 22 /root/.ssh/id_rsa.pub root@192.168.100.82:/root/.ssh/authorized_keys

這樣A和B主機就可以互相傳文件而不需要密碼了.

如果連接反應慢,請修改以下兩參數

/etc/ssh/sshd_config
GSSAPIAuthentication no
UseDNS no

重啟sshd

service sshd restart

################################################################################

二.使用ssh-keygen和ssh-copy-id三步實現SSH無密碼登錄

  由於上面這樣復制文件很麻煩,以下給出更為方便的方法,在做單向ssh認證時都在本端計算機進行, 即使用ssh-copy-id進行操作,它可以直接在對端生成authorized_keys文件.

    a、運行:ssh-keygen -t rsa 
    b、然后拍幾下回車(均選擇默認)
    c、運行: ssh-copy-id -i .ssh/id_rsa.pub "-p 6168 user1@192.168.3.192"
    d、輸入被控端的密碼,就可以了,這樣就在對端的.ssh目錄下自動生成authorized_keys,就算對端沒有.ssh目錄也會自動創建,這里的-p指定的是我的ssh的端口號。
實例操作:
[user1@localhost ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user1/.ssh/id_rsa): 
Created directory '/home/user1/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user1/.ssh/id_rsa.
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
The key fingerprint is:
da:e3:f0:2b:93:47:15:4d:a1:dc:68:00:07:ec:41:87 user1@localhost
The key's randomart image is:
+--[ RSA 2048]----+
|     o+++  oo.   |
|      Eo o.+.    |
|     . .  =..    |
|      .  ..      |
|        S.       |
|       o.        |
|      ooo        |
|      ++..       |
|       ++.       |
+-----------------+

[user1@localhost ~]$ ssh-copy-id -i .ssh/id_rsa.pub "-p 6168 user1@192.168.3.192"
The authenticity of host '[192.168.3.192]:6168 ([192.168.3.192]:6168)' can't be established.
RSA key fingerprint is 8d:8c:22:67:68:f7:ad:1e:83:f3:4c:d4:32:d8:53:d6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.3.192]:6168' (RSA) to the list of known hosts.
user1@192.168.3.192's password: 
Now try logging into the machine, with "ssh '-p 6168 user1@192.168.3.192'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

[user1@localhost ~]$ 
#這樣就會自動在192.168.3.192遠端機器的.ssh目錄下創建authorized_keys文件.  
如果需要sudo權限,需要將本機的root的公鑰放到對端賬號的.ssh/authorized_keys里面.
通過shell腳本,自動生成key密鑰,實現批量自動化生成和分發
#!/bin/bash
if [ ! -f ~/.ssh/id_rsa ];then
 ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
else
 echo "id_rsa has created ..."
fi

其中:

 -t  type
             指定要創建的密鑰類型。可以使用:"rsa1"(SSH-1) "rsa"(SSH-2) "dsa"(SSH-2).
 -P  passphrase
             提供(舊)密語.
-f  filename
             指定密鑰文件名.
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM