SSH 身份验证如何工作?

SSH 身份验证如何工作?

我的问题是基于以下场景:serverAserverBuser1user2。两个用户都出现在两台服务器上。

user1onserverA已生成 SSH 密钥对,并将公钥复制到authorized_keys上的文件中serverB

user2onserverA没有生成 SSH 密钥对,并且 on 也没有生成serverB

user1登录到serverA.user1尝试通过 SSH 连接到serverBas user2( ssh user2@serverb),它工作正常,不需要密码。

我的问题是这样的。这是如何运作的?user2上没有公钥serverB。我一直认为 SSH 对尝试登录的用户进行身份验证。这是否意味着 SSH on对serverB当前登录进行身份验证?user1serverA

答案1

这听起来根本不对。您使用 OpenSSH 吗?或者其他一些 ssh 实现?

回到你的问题,它是如何工作的,它正如你所期望的(简化的):

  • 连接到远程系统。
  • 通过用户名。
  • 远程系统验证用户是否存在并请求密钥(如果配置了密钥身份验证)。
  • 检查用户 HOME/.ssh/authorized_keys 是否存在
  • 一项一项地检查authorized_keys 中的条目,直到一项有效,或者无一项为止。
  • 如果找到匹配的密钥,则身份验证成功。

它完全基于目标用户 ~.ssh/authorized_keys 文件中的密钥。如果没有这样的文件/密钥,则某些东西会严重损坏。

答案2

在评论中,您提到了.rht_authorised key.

默认的每用户授权密钥文件应该是~/.ssh/authorized_keys~用户的主目录。如果.rht_authorised使用,则意味着正在使用非默认 OpenSSH 配置。

/etc/ssh/sshd_config可以(使用AuthorizedKeysFile关键字)为授权密钥文件定义不同的位置(或多个位置):如果将其定义为绝对路径并且定义中没有使用%h,%u或等标记%U,则所有用户将使用相同的授权密钥文件。

在较新的 OpenSSH 版本中,还有一个AuthorizedKeysCommand关键字,它定义一个程序或脚本,用于在验证用户身份时查找公钥。默认情况下不使用它,但可能会在某些托管或云设置中使用。

报告什么grep -i authorizedkeys /etc/ssh/sshd_config

相关内容