基于SSH密钥的身份验证:known_hosts与authorized_keys


21

我读到有关在Linux中设置ssh密钥的问题,并有一些疑问。如果我错了纠正我…

假设主机tr-lgto希望使用ssh连接到主机tr-mdm。如果要确保它是真实的known_hoststr-mdm ,则在tr-mdm上生成一对密钥,然后将公共密钥添加到tr-lgto上。如果tr-mdm要检查它是真实的tr-lgto,则tr-lgto必须生成一个密钥对并将公钥添加到tr-mdm authorized_keys上。

问题1:文件known_hosts中没有用户字段,只有IP地址和主机名。tr-mdm可能有很多用户,每个用户都有自己的.ssh文件夹。我们应该在每个known_hosts文件中添加公钥吗?

问题2:我发现ssh-keyscan -t rsa tr-mdm它将返回tr-mdm的公钥。我怎么知道此密钥属于哪个用户?而且,公钥输入/root/.ssh/与该命令返回的内容不同。怎么会这样?



我在@Gilles提到的问题的答案“关于包含公钥的安全文件”中为“ ssh”添加了一些背景上下文:< security.stackexchange.com/questions/20706/… >
IAM_AL_X,

Answers:


33

您正在将服务器计算机对客户端计算机的身份验证与用户对服务器计算机的身份验证混淆。

服务器认证

建立SSH连接时发生的第一件事是服务器将其公共密钥发送给客户端,并向客户端证明(由于公共密钥加密)它知道相关联的私钥。这将对服务器进行身份验证:如果协议的这一部分成功完成,则客户端将知道服务器是它所假装的人。

客户端可以检查服务器是否为已知服务器,而不是某些流氓服务器试图以正确的身份通过。SSH仅提供一种简单的机制来验证服务器的合法性:它会~/.ssh/known_hosts在客户端计算机上的文件(也有系统范围的文件/etc/ssh/known_hosts)中记住您已连接的服务器。第一次连接服务器时,您需要通过其他某种方式进行检查,以确保服务器提供的公钥确实是您要连接的服务器的公钥。如果您具有要连接的服务器的公钥,则可以将其~/.ssh/known_hosts手动添加到客户端上。

在向服务器发送任何机密数据之前,必须先对服务器进行身份验证。特别是,如果用户身份验证涉及密码,则不得将密码发送到未经身份验证的服务器。

用户认证

只有当远程用户可以证明他们有权访问该帐户时,服务器才允许该用户登录。根据服务器的配置和用户的选择,用户可以提供几种形式的凭据之一(以下列表并不详尽)。

  • 用户可以提供他尝试登录的帐户的密码;然后,服务器验证密码是否正确。
  • 用户可以呈现公共密钥并证明他拥有与该公共密钥相关联的私有密钥。这与用于验证服务器的方法完全相同,但是现在用户正在尝试证明其身份,而服务器正在对其进行验证。如果用户证明他知道私钥并且公钥在帐户的授权列表中(~/.ssh/authorized_keys在服务器上),则接受登录尝试。
  • 另一种类型的方法涉及将验证用户身份的工作的一部分委托给客户端计算机。当许多机器共享相同的帐户时,这会在受控环境(例如企业)中发生。服务器通过与另一端使用的机制相同的机制对客户端计算机进行身份验证,然后依靠客户端对用户进行身份验证。

1
Gilles的回答很好,但是我的问题是任何服务器都可以发送随机的公共密钥并证明它具有关联的公共密钥。如何证明服务器是真实的?
Alex

@spartacus我认为您的意思是“并证明它具有关联的私钥”,对吗?这个想法是,客户端向服务器发送随机生成的值(质询),然后服务器根据依赖于质询的私钥进行一些计算(因此,服务器在收到此值之前无法进行计算)挑战),而这只能在知道私钥的情况下完成。
吉尔(Gilles)'“ SO-别再作恶了”

我认为亚历克斯指的是客户端第一次连接到服务器。我认为客户端将在第一时间信任服务器。然后,服务器将发送其公钥,并且客户端将能够为以下连接认证服务器。
synack

@synack啊,第一次?而是由客户端让用户做出决定(“您确定要继续连接(是/否)吗?”)。服务器当时没有任何证明。
吉尔斯(Gillles)“所以-别再邪恶了”

没错,是用户做出决定。
synack

2

我的朋友给了我答案。默认情况下,密钥标识机器,而不是用户。因此,密钥存储在/ etc / ssh /中。这就是为什么我得到的密钥与/root/.ssh中存储的密钥不同的原因

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.