我有一个生产系统,其中允许几个不同的人登录到一个帐户 - 该帐户用于应用程序而不是个人,因为我们在生产服务器上没有个人帐户。
出于审计目的,我希望能够知道谁在什么时候登录了,并且由于我们使用 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