繁体   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