Linux的SSH免密登錄認證過程研究


一、先看下SSH免密登錄使用到的工具和生成的文件

工具:ssh-keygen用於生成秘鑰文件,其中秘鑰分為公鑰和私鑰、ssh-copy-id用於復制公鑰文件到被控制機。

文件:ssh-keygen生成的秘鑰文件有兩個,放在~/.ssh/,id_rsa為私鑰、id_rsa.pub為公鑰

被控制機文件:通過ssh-copy-id復制的公鑰在被控制機這個文件里,~/.ssh/authorized_keys

id_rsa.pub公鑰如下示例:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvSkEZ0fKXRqQ/DkjCfsAETsQgV8OR/RVQmwBk/J5IWoknf8Dr
y5kOs+1bnx9zaf8oIcVuXf0jRxTccLBOXiReFJE4aD2rWO33sqA0M4qP1ESYhsU4yokRA0IMDJ62JUv2cWVJg
GpeQriol2t7mH8E6aB8OiJ+NgRbh6+/0LbtQs40VA2+W5PtaBwT4sjv9LOHIdzQcsEeCM8MIHqmXHst7/JuVI
i7wLCxB7Ur8qtwZ2/Ii8Ckjfo6mikWmSh6mRMq9qn0FkMkPCcpm8o4f1zJWOuf+RnjPpopFTqIa8JssMHJMuQ
cCm3EHDkBHjLk/SkidWOzqOtSvUeGKieWiijuw== username@localhost.localdomain

id_rsa私鑰如下示例:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA3zh+wHRki5ysBPcrDxL/MGI/vO4aYW6nTgShJKoNny79wkyY
UhhPukkYtRhAxflmqwSvs1kUmYNRrUN1MEeJHEVdZvkQeyLHf1gCkaw1G5Gi/Ijv
WcdKZ4SoUJj3bBYjuH93oIInQCeKSJ26DkiK/yyZuU4P82SZej78dVceJQZf/GzD
uFQYm4CLFDPHq+/Vf/OtedBSvGST/c+gj3O97G9RV+kIfbZJjrR8SKky/vwKUtsv
5b8bQX6c5ZV8GXiDr3TwExljMW+OE9P6yXiYv5MrF6qrh6GevoZxKVy1xs/GTn1N
VBxevqK8haEjTIqDhuAyXtb7BRa1UuY2Q9G1gwIDAQABAoIBAG67uO1CECrOAuvH
rZ2hv+RBqPrRZ1bULLzgQQxOK8m+5vV/R8TZ+Jsh7dbQfDl5unu2LG8dDsIEyfzY
zQaxRgw3QNl3Try3CR5cC5I2SnYtrhv21j3ERl3KCjFJYNxGs1uwKCkAx/XkZ44U
aJrzU7i4aF3rorAMRLLHEjgninW0obQhfUKOZCMQBRtWWdzFz+/qfX7aiO/3Iz0W
bF5A8ygn20C25zBNYQUAzF1L2xnMRvTELsa8v/k+bnVc0E8BnFJ5SwmK7dalL8w4
b3wvtDTXv1betE/4+fWB8tbkGaqslrhbo0SS8IZNXCYS3kRDC7AcCszP5Alqm4hI
PTFkHiECgYEA8Tdo4h+Hw7/wR+bJJjexxuD5nHrFtHa+h9UTQFB6MlIChDPGuvfB
oHlScErIsrLIzIgjpFnnb4nEtc6/IYzyPDma0VTypLij5yuSTk8rPgnwm9qZBXmo
j0spHW8ti5qdsNzFKnpX8x5RPD8+ROr67aee7LVOOf6mWnwcHShMDnECgYEA7Oa9
NOn+DUz7rIAr3wuouV5Zc7CC4ij0SNYdKaoH24SrF2QSXbgQIZiV1z/KZyJefyHS
J+PpcfvRz7BD3RT4Ze7d3Tz1aqtjLkM100b15FDUQKYKUvvUDUgKhskFEos0VSvG
/WwyAXSqFTqXJqxzUzskTa3sLvaPLtaqTlMcpTMCgYBKHdVrTXbgzdQds6rwxEIq
sqvfydV/qtDGWdEtfMzfM1W0m1gf0Mq87SpIeKIMTmTme5pAAKPdIL7BgkI2I+G2
YZjRY0GfHWC3QisVRrwpttIogVVtWkFRri127tdWwu5bDqrCb48gk5swYNpYQL9T
UKLDZr4fkcA5o1LcHqqn8QKBgQCZ661hdOr5D1yyDrDygavFjPTHwxa3BO77aAqY
qH3kdgWH9CAuvknU2kP5D9xdOCp3paza+C0UPw5qR9dADMD70cBbX6EBBowxYb/W
H1PiXVYbDwbENhTn8DfOrUtbahC9ie0HeUXgRkG/+0p7+S4RFOsYgXlkZhRP1W/f
5gZFmwKBgQDPuKUBsGuOpnaV+8q0wtjbKtHbTLSlAGNnnRDIs/5xBms1onekFpIU
f3TawKYayf2IN/PLygeoa3PC8Rd6KHCy0Y7A2TD/sxMgNiPaz4L4KoWMcIk+rzuc
OMIvyyXX2qUTxVagF6aaE65dQ+GGxr4pUS3YJhPizpA6dPp8Apbd4w==
-----END RSA PRIVATE KEY-----

二、驗證過程

不是說在某個用戶下免密之后,就必須要在特定的用戶下進行登錄,其實這個不太符合實際;應該說SSH免密登錄時會找當前用戶下的~/.ssh/目錄下的文件進行驗證登錄,所以不一定要存在文件和指定的用戶,只要有內容即可,通常SSH免密登錄時指定私鑰。

下面是詳細的登錄過程:

在建立連接的時候, 涉及到2對密鑰, 其中一對為准備階段產生並分配好的密鑰對, 另一對為服務器在接收到一個連接請求時生成的密鑰對. 為了講述方便, 我們將這兩組密鑰對表示如下

Symbol Description
PubC 客戶端密鑰對應的公鑰
PrvC 客戶端握有的私鑰
PubS 服務器端產生的公鑰
PrvS 服務器端產生的私鑰

1、認證

①服務器生成隨機數(稱之為challenge) x, 並用 PubC 加密后生成結果 s(x), 發送給客戶端.

②客戶端使用 PrvC 解密 s(x) 得到 x, 再將xPubS加密發送回服務器端.

③服務器端使用PrvS解密得到x, 進行核對, 如果正確則鏈接正式成立.

2、通信加密

在請求連接前, 服務器端和客戶端擁有的密鑰為

1
2
3
Server | Client
--------------------------------------
PubC | PrvC

①客戶端發出申請. 服務器會產生一組 session 密鑰對, 即PubSPrvS.

此時服務器端和客戶端擁有的密鑰如下所示

1
2
3
4
5
Server | Client
-------------------------------------
PubC | PrvC
PubS |
PrvS |

②服務器端利用客戶端的公鑰PubC對 session 公鑰PubS進行加密后發送給客戶端.

③客戶端用自己的密鑰PrvC解密信息,得到 session 公鑰PubS

1
2
3
4
5
Server | Client
-------------------------------------
PubC | PubS
PrvS | PrvC
PubS |

④之后的數據交互,都通過對方方公鑰加密,對方收到信息后,用其私鑰解密,實現安全加密過程。

流程如下所示:

 

三、SSH登錄指定私鑰

從上面的原理可以分析出,在通訊時,並不需要控制機使用公鑰做什么,而被控制機需要使用到公鑰,再就是控制機主要使用到的是私鑰,所以SSH可以指定私鑰進行遠程登錄。

命令如下:-i指定了私鑰文件

ssh -i /root/.ssh/id_rsa root@192.168.1.2

 

 

參考(以上內容部分轉自下面文章):

https://fancyseeker.github.io/2013/12/30/ssh_overview/

https://www.jianshu.com/p/0f9b72d691c2 

https://www.jianshu.com/p/2b5ab0e9e8b1

https://segmentfault.com/a/1190000012484646

https://www.waitig.com/ssh%E5%85%8D%E5%AF%86%E7%99%BB%E5%BD%95%E5%AE%9E%E7%8E%B0%E5%8A%9E%E6%B3%95%E5%8F%8A%E5%8E%9F%E7%90%86.html

https://www.cnblogs.com/scofi/p/6617394.html

https://blog.csdn.net/qq_26907251/article/details/78804367


免責聲明!

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



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