![](/img/trans.png)
[英]Passwordless ssh using key authentication in rackspace cloud fails: asks for password
[英]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正在這樣做:
正如您所看到的,此過程不會進行密碼驗證。 密碼驗證只是門的一種方式。 我們習慣於通過'login'或ssh暴露密碼提示來實現此方法。 但是有很多方法。 核心要求是執行身份驗證的程序具有root權限。
每個人都已經提到sshd
作為特權守護進程運行。
那么無密碼公鑰認證如何工作?
當用戶連接到sshd
,除非另有配置,否則sshd
將要求遠程連接呈現密鑰。 在沒有密鑰的情況下, sshd
將嘗試詢問遠程用戶的其他身份證明方法,其中一種是交互式密碼。
在開始使用無密碼公鑰驗證之前,必須注冊其公鑰。 這通常涉及將公鑰復制到用戶的.ssh/authorized_keys
文件。 有一個cli ssh-copy-id
可以做到這一點。
那么私鑰/公鑰認證如何工作呢? 當用戶連接到ssh daemon
, ssh
客戶端將讀取用戶的私鑰,通常以不同的文件名(如id_rsa
或identity
或id_dsa
存儲在.ssh
。 ssh
客戶端將從私鑰生成公鑰,並將公鑰呈現給sshd
。 sshd
守護程序會將收到的公鑰與用戶的authorized_keys
。 如果找到匹配項,則允許連接。 然后sshd
將生成一個進程和一個shell,並將這些權限放到用戶的權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.