![](/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.