簡體   English   中英

ssh無密碼登錄,僅限公鑰認證(窗簾后面是什么)

[英]ssh passwordless login, public key authentication only (whats going on behind the curtains)

在ssh中,可以僅使用公鑰認證為遠程用戶設置無密碼登錄。 出於好奇,在設置無密碼登錄時,代碼實際上是什么?

ssh-server守護程序是存儲用戶密碼,然后在他們對公鑰進行身份驗證時自動應用它們,還是ssh-server可以使用某種系統調用魔法完全繞過用戶帳戶的密碼身份驗證過程?

ssh服務器守護程序通常以root用戶身份(或其他特權用戶)運行,因此可以簡單地生成一個運行的登錄會話,以滿足任何用戶的需求。 沒有密碼。

其他以類似方式工作的東西是sudo-u標志,以及已經以root身份運行的su命令。

sshd (SSH守護程序)進程在您的服務器(例如root)上運行特權,因此在成功完成身份驗證后,它會在用戶登錄時生成登錄shell。

您從假設密碼是身份驗證的要求開始。 但它實際上只有一種方式。 在現代Linux上,PAM子系統控制身份驗證和授權。 如果您正確回答了三個問題,您可以創建一個允許您登錄的PAM模塊。 或者知道正確的號碼。 或者更加古怪的是,您的“密碼”可能是通過MIDI設備輸入的音樂序列:-)

需要將輸入的名稱與Unix UID綁定,然后將其與身份驗證機制相匹配。 SSH正在這樣做:

  1. 獲取您提供的名稱並通過PAM獲取“密碼輸入”
  2. 使用“密碼輸入”來定位用戶的$ HOME
  3. 根據身份驗證中發送的密鑰驗證$ HOME / .ssh / authorized_keys中的SSH密鑰
  4. 如果以上所有工作,請啟動shell作為用戶的UID

正如您所看到的,此過程不會進行密碼驗證。 密碼驗證只是門的一種方式。 我們習慣於通過'login'或ssh暴露密碼提示來實現此方法。 但是有很多方法。 核心要求是執行身份驗證的程序具有root權限。

每個人都已經提到sshd作為特權守護進程運行。

那么無密碼公鑰認證如何工作?

當用戶連接到sshd ,除非另有配置,否則sshd將要求遠程連接呈現密鑰。 在沒有密鑰的情況下, sshd將嘗試詢問遠程用戶的其他身份證明方法,其中一種是交互式密碼。

在開始使用無密碼公鑰驗證之前,必須注冊其公鑰。 這通常涉及將公鑰復制到用戶的.ssh/authorized_keys文件。 有一個cli ssh-copy-id可以做到這一點。

那么私鑰/公鑰認證如何工作呢? 當用戶連接到ssh daemonssh客戶端將讀取用戶的私鑰,通常以不同的文件名(如id_rsaidentityid_dsa存儲在.ssh ssh客戶端將從私鑰生成公鑰,並將公鑰呈現給sshd sshd守護程序會將收到的公鑰與用戶的authorized_keys 如果找到匹配項,則允許連接。 然后sshd將生成一個進程和一個shell,並將這些權限放到用戶的權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM