我的问题是基于以下场景:serverA
、serverB
、user1
和user2
。两个用户都出现在两台服务器上。
user1
onserverA
已生成 SSH 密钥对,并将公钥复制到authorized_keys
上的文件中serverB
。
user2
onserverA
没有生成 SSH 密钥对,并且 on 也没有生成serverB
。
user1
登录到serverA
.user1
尝试通过 SSH 连接到serverB
as user2
( ssh user2@serverb
),它工作正常,不需要密码。
我的问题是这样的。这是如何运作的?user2
上没有公钥serverB
。我一直认为 SSH 对尝试登录的用户进行身份验证。这是否意味着 SSH on对serverB
当前登录进行身份验证?user1
serverA
答案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
?