我想知道登录 SSH 会话时使用了哪个密钥。我想将密钥与本地数据库关联,并将电子邮件发送到与密钥对应的地址。
第一步是找到正在使用的密钥。
答案1
您将需要启动日志记录。
在客户端,“ssh -v”将显示使用了哪个私钥。
在服务器端,默认日志级别仅显示使用了公钥(而不是密码验证)。您需要将 sshd_config 中的日志级别至少设置为 VERBOSE。
答案2
要做到这一点,你必须将LogLevel
sshd 的提升到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