如何找出用于登录 SSH 会话的密钥

如何找出用于登录 SSH 会话的密钥

我想知道登录 SSH 会话时使用了哪个密钥。我想将密钥与本地数据库关联,并将电子邮件发送到与密钥对应的地址。

第一步是找到正在使用的密钥。

答案1

您将需要启动日志记录。

在客户端,“ssh -v”将显示使用了哪个私钥。

在服务器端,默认日志级别仅显示使用了公钥(而不是密码验证)。您需要将 sshd_config 中的日志级别至少设置为 VERBOSE。

答案2

要做到这一点,你必须将LogLevelsshd 的提升到VERBOSE

logLevel VERBOSE

/etc/ssh/sshd_config重新启动 sshd。这将导致 sshd 将用于登录的密钥的指纹记录到配置的日志文件(/var/log/secure、/var/log/auth 等)。您将收到类似以下的消息

Dec  9 11:47:15 host sshd[32282]: Found matching RSA key: 54:d2:06:cf:85:ec:89:96:3c:a8:73:c7:a1:30:c2:8b

54:d2:06:cf:85:ec:89:96:3c:a8:73:c7:a1:30:c2:8b是用于登录的密钥的指纹。

您可以使用以下命令获取特定密钥的指纹

ssh-keygen -lf <keyfile> 

其中 keyfile 是公钥

sshkeygen -lf /tmp/test.key
2048 21:02:4b:82:83:62:49:d7:5f:e0:8f:cf:ec:a3:5f:38 /tmp/test.key (RSA)

答案3

如果你想检测当前使用的 ssh 密钥在当前 ssh 会话中,那么似乎有一个更好的方法,因为OpenSSH 7.6

在服务器的 sshd_config 中设置ExposeAuthInfo yes。您应该能够通过 将此配置限制为特定用户Match User geoaxis

然后,重新启动 sshd 并重新登录后,应该有一个环境变量SSH_USER_AUTH,其中包含带有身份验证信息的文件的路径。 如果使用公钥身份验证,则此文件包含以字符串为前缀的完整公钥publickey

这样,您就不需要手动将环境变量添加到您的~/.ssh/authorized_keys

答案4

@user9517 的日志想法很好,你甚至可以使用脚本监控日志等。

environment="SSH_KEY_ID=geoaxis"此外,您还可以在实际密钥前添加(参见sshd(8)AUTHORIZED_KEYS FILE FORMAT),然后您可能可以在 /etc/profile 或类似文件中使用该环境变量。

sshd_config(5)但也要看看AuthorizedKeysCommand

相关内容