几位开发人员在测试服务器上使用共享帐户,使用公钥身份验证。有没有办法找出用于身份验证的密钥(例如密钥注释)?
答案1
您是否想在已经发生的事情(取证)之后找出这一点,或者您是否想这样做以便记录谁做了什么?
用于取证:在我的 Fedora 系统上,/var/log/secure
包含每个公钥认证和用户名的记录,但没有说明使用了哪个密钥。你在这里可能运气不佳
为了将来的可审计性:您可以使用该authorized_keys
文件来设置每次登录所限制的命令,然后运行一个记录身份验证的程序(以及可能的后续命令,使用类似须藤脚本):
如果行首的选项短语包含关键字 command="string",则任何使用该特定密钥进行身份验证的 ssh 连接都将只运行指定的命令,即使给出的命令行指定了另一个命令。
但必须说,建立多个帐户然后设置共享访问区域可能更有意义......
答案2
...使用共享帐户...
感谢您为我们提供了一个完美的例子来解释为什么这是一个坏主意。;-)
不过说真的,据我所知,你想做的事是无法做到的。如果你说的“密钥注释”是指密钥后面的 id_rsa 文件中的注释,那也是不行的。它只是一条注释,不会发送到另一端的服务器。
确实。设置多个账户。
答案3
如果您将 sshd 设置为以足够详细的级别进行记录,则会打印用于登录的密钥的指纹。不过,这会非常快地填满您的日志。
答案4
为了可审计性并且如果您的员工正在使用 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