Linux
無密碼 ssh - 基礎知識
我正在嘗試配置 passwordless
ssh
。我已經閱讀了網路上的基本教程,但是關於基本過程的一些事情讓我很困擾。假設我坐在客戶端並想登錄伺服器(恰好在本地網路上,但這並不重要)。無論如何,我想在伺服器上生成密鑰對並將公鑰複製到客戶端是有意義的。在伺服器上生成密鑰對有兩個原因:
- 您已經登錄到您想要無密碼 ssh 的伺服器帳戶,因此登錄資訊可以包含在密鑰對中
- 您顯然只需要客戶端上的伺服器公鑰
當 ssh-ing 進入伺服器時,客戶端發送在伺服器上創建的公鑰。公鑰與伺服器上的私鑰匹配,並允許登錄。
但是我閱讀的每個教程都有在客戶端創建的密鑰對,導致我的大腦爆炸。我希望閱讀這篇文章不會讓你的大腦爆炸。我錯過了什麼?
我認為退後一步,看看非對稱加密的工作原理會有所幫助。每個實體(客戶端/伺服器)都以一對密鑰開始——一個公鑰和一個私鑰,它們在數學上是相互關聯的。
在標準過程中,我們將客戶端的公鑰複製到伺服器。當客戶端連接時,伺服器需要驗證客戶端確實擁有這個密鑰對(記住公鑰是公開的,即與其他方共享)。因此,它獲取公鑰,用它(*)加密隨機消息,並將其發送給客戶端。客戶端獲取加密消息,使用其私鑰對其進行解密,然後詢問伺服器 - “嘿,這是消息嗎?”。如果伺服器同意,則認為客戶端已通過身份驗證並繼續連接。
讓我們反轉這個場景,看看會發生什麼。伺服器有一個密鑰對,公鑰在客戶端。需要私鑰來證明身份,並且僅對伺服器可用。因此,客戶端可以驗證伺服器的身份,但反過來是不可能的。任何獲得伺服器公鑰(這也是公開的)的人都可以連接到伺服器。這顯然是一個安全問題。
通過讓每個客戶端使用自己的密鑰對和客戶端的私鑰,伺服器可以驗證每個客戶端的身份。只有將公鑰添加到伺服器的授權密鑰列表中的客戶端才能連接。客戶端的私鑰通常受到額外的加密層和密碼片語的保護。