ssh服務認證---基於密鑰的認證過程講解

系統信息

[root@nfs01 ~]# uname -r
2.6.32-696.el6.x86_64
[root@nfs01 ~]# uname -m
x86_64
[root@nfs01 ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)

ssh分發公鑰,進行遠程免密登錄過程詳解

1)客戶端建立密鑰對

[root@web01 .ssh]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
d1:86:87:7a:d4:4a:df:d0:e9:12:4c:9f:46:3e:2b:6b root@web01
The key's randomart image is:
+--[ DSA 1024]----+
|          . .    |
|         B = o   |
|        * O O    |
|       + * * o   |
|      . S + +    |
|       .   +     |
|          E      |
|         .       |
|                 |
+-----------------+
[root@web01 .ssh]# ls
id_dsa  id_dsa.pub

2)客戶端分發公鑰到服務端

[root@web01 .ssh]# ssh-copy-id -i id_dsa.pub root@172.16.1.31
The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established.
RSA key fingerprint is d8:50:de:b6:99:02:66:dd:e8:63:1a:31:1d:b2:60:dc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.1.31' (RSA) to the list of known hosts.
root@172.16.1.31's password: 
Now try logging into the machine, with "ssh 'root@172.16.1.31'", and check in:

  .ssh/authorized_keys

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


翻譯:
主機'172.16.1.31(172.16.1.31)'的真實性沒法創建。
RSA密鑰指紋是d8:50:de:b6:99:02:66:dd:e8:63:1a:31:1d:b2:60:dc。
你肯定要繼續鏈接嗎(是/否)?
警告:將「172.16.1.31」(RSA)永久添加到已知主機列表中。
如今嘗試使用「ssh'root@172.16.1.31'」登陸到計算機,而後簽入:
  .ssh/authorized_keys
以確保咱們沒有添加您不指望的額外密鑰。

[root@web01 .ssh]# ls
id_dsa  id_dsa.pub  known_hosts


來自服務端的公鑰rsa
[root@web01 .ssh]# cat known_hosts 
172.16.1.31 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArCjSlfwBSCHM/V4jAI5rii8W5fu2/AW2oqpFbEg5IbpnI83vPhSpNZBJWBFYrZRPngTt2cTJixJbyBaa3Dg8MNLBH+rvMq5oOvRBLCwQ3wX0VDncUfTbg/GHDy+3gOX9+5YZQp7YRt9S8oKlIEZGyScnNCPJW2f9i6hvm5uIn3gQ+TLgbGnY42d06EOqfvBtf3HPBlGyWiTiDFxFegFOiL7wefdtJXMGvWC5Cm9/xU8TROxvh6SRi0vO4pPED3WJnXwPFHnRgrPfh4taoSt403+F23u9Hcy8+kYg+f/zXkbIWWt2S5P/ElTciYBmGeDzqjhK+kRrVYB/TiOuCThEHQ==


進入服務端,查看rsa公鑰,是否和上面顯示的是否一致
[root@nfs01 ~]# cd /etc/ssh/
[root@nfs01 ssh]# cat ssh_host_rsa_key.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArCjSlfwBSCHM/V4jAI5rii8W5fu2/AW2oqpFbEg5IbpnI83vPhSpNZBJWBFYrZRPngTt2cTJixJbyBaa3Dg8MNLBH+rvMq5oOvRBLCwQ3wX0VDncUfTbg/GHDy+3gOX9+5YZQp7YRt9S8oKlIEZGyScnNCPJW2f9i6hvm5uIn3gQ+TLgbGnY42d06EOqfvBtf3HPBlGyWiTiDFxFegFOiL7wefdtJXMGvWC5Cm9/xU8TROxvh6SRi0vO4pPED3WJnXwPFHnRgrPfh4taoSt403+F23u9Hcy8+kYg+f/zXkbIWWt2S5P/ElTciYBmGeDzqjhK+kRrVYB/TiOuCThEHQ==

    從上面可知,客戶端分發公鑰到服務端時,會接收到服務端的rsa公鑰,並將此公鑰保存到文件/root/.ssh/known_hosts中,經過查看服務端/etc/ssh/ssh_host_rsa_key.pub文件內容,肯定內容一致。web

    在接收到服務端公鑰以後,輸入服務端密碼,將客戶端公鑰信息發送到服務端/root/.ssh/authorized_keys文件中
    此時,服務端擁有客戶端的公鑰和本機的私鑰,客戶端擁有服務的公鑰和本機的私鑰安全

3)進行免密登錄測試

[root@web01 .ssh]# ssh 'root@172.16.1.31'
Last login: Mon Mar 12 11:46:28 2018 from web01
[root@nfs01 ~]#

    免密登錄成功服務器

第三步免密登錄鏈接過程講解:

    在執行此命令(ssh 'root@172.16.1.31')時,首先是客戶端發起創建鏈接請求,請求使用密鑰進行安全認證,併發送客戶端的公鑰信息到服務端,服務端接收到請求以後,首先根據請求鏈接的root用戶查找服務器端root用戶家目錄下事先保存的客戶端的公鑰,比較是否和請求鏈接時發送的公鑰一致;若是兩個密鑰一致,服務器端就用客戶端的公鑰進行加密「質詢」,併發送給客戶端。網絡

    客戶端在接收到「質詢」以後,使用本機的私鑰進行解密,再把解密結果,經過服務端的公鑰進行加密,而後發送給服務端,服務端接收到客戶端發送的結果以後,服務端使用本機私鑰進行解密,驗證質詢,若是驗證經過,創建鏈接。併發

    客戶端和服務端進行數據傳輸時,進行加密、解密的方式進行交流。dom

    客戶端擁有服務端的公鑰; 服務端擁有客戶端的公鑰ssh

    客戶端使用服務端的公鑰進行數據的加密,對接收的服務端的數據使用本機私鑰解密。ide

    服務端使用客戶端的公鑰進行數據的加密,對接收的客戶端的數據使用本機私鑰解密。測試

    私鑰不能在網絡中傳輸---私鑰能夠解密公鑰加密

    公鑰能夠在網絡中傳輸---公鑰不能解密私鑰    

注:本博客基於本身的理解所寫,讀者可根據本身的思路進行理解,若是此博文有錯誤,請告知,謝謝!

相關文章
相關標籤/搜索