是否可以让 OpenSSH 记录身份验证中使用的公钥?

Gus*_*uss 29 linux ssh logging public-key

我有一个生产系统,其中允许多个不同的人登录到一个帐户 - 该帐户用于应用程序而不是用于个人,因为我们在生产服务器上没有个人帐户。

出于审计目的,我希望能够知道谁在什么时间登录,并且当我们使用 SSH 密钥登录时,跟踪它似乎是合乎逻辑的(因为没有其他标识符可跟踪)。

当 SSH 对用户进行身份验证时,它会将用户名记录到系统的安全日志中,但不会记录登录时使用了哪个授权公钥。 是否可以让 OpenSSH 也报告使用了哪个公钥,或者只是与该键相关的评论?

正在使用的操作系统是 CentOS 5.6,但我也想知道它是否可以在其他操作系统上使用。

use*_*517 36

如果您在 /etc/sshd/sshd_config 中将 LogLevel 提高到 VERBOSE,它将记录用于验证用户身份的公钥的指纹。

LogLevel VERBOSE
Run Code Online (Sandbox Code Playgroud)

然后你会收到这样的消息

Jul 19 11:23:13 centos sshd[13431]: Connection from 192.168.1.104 port 63529
Jul 19 11:23:13 centos sshd[13431]: Found matching RSA key: 54:a2:0a:cf:85:ef:89:96:3c:a8:93:c7:a1:30:c2:8b
Jul 19 11:23:13 centos sshd[13432]: Postponed publickey for user from 192.168.1.104 port 63529 ssh2
Jul 19 11:23:13 centos sshd[13431]: Found matching RSA key: 54:a2:0a:cf:85:ef:89:96:3c:a8:93:c7:a1:30:c2:8b
Jul 19 11:23:13 centos sshd[13431]: Accepted publickey for user from 192.168.1.104 port 63529 ssh2
Run Code Online (Sandbox Code Playgroud)

您可以使用

 ssh-keygen -lf /path/to/public_key_file
Run Code Online (Sandbox Code Playgroud)

获取特定公钥的指纹。

  • 谢谢!我需要根据`authorized_keys`文件确认密钥指纹,所以我制作了这个小脚本来打印授权密钥的指纹:`(p="$(mktemp)";cat ~/.ssh/authorized_keys|while IFS= "$(printf "\n")" 读取密钥;执行 echo $key > $p; ssh-keygen -lf $p; done; rm -f $p)` (3认同)
  • [此线程](http://www.derkeiler.com/Newsgroups/comp.security.ssh/2007-01/msg00096.html) 看起来很相关。它两次找到匹配的密钥:一次确定密钥是否可接受,然后第二次检查客户端提供的签名。 (2认同)