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

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

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

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

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

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

答案1

如果您在配置文件(或类似文件)中提出,LogLevel它将记录用于验证用户的公钥的指纹。VERBOSE/etc/sshd/sshd_config

LogLevel VERBOSE

然后你会收到如下消息:

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

您可以使用:

 ssh-keygen -lf /path/to/public_key_file

获取特定公钥的指纹。

答案2

如果您的用户正在使用 ssh-agent,您可以将其放入您的 .bashrc 中:

SSH_KEY_NAME=$(ssh-add -L | cut -d' ' -f 3 || 'unknown')
if [[ ! $SSH_KEY_NAME ]]; then SSH_KEY_NAME="no agent"; fi
echo `/bin/date` $SSH_KEY_NAME >> ~/.login.log

答案3

尝试使用LogLevel中的参数sshd_config。有关详细信息,请参阅 man sshd_config

相关内容