检查 authorized_keys 以查看用于推送提交的密钥

Check authorized_keys to see which key was used for pushing the commit

假设在具有 Git 个存储库的服务器上的 ~/.ssh/authorized_keys 中有大量 ssh public 密钥列表,一般格式为“ user@mail.com

我想为预接收挂钩编写 bash 脚本,它会检查使用哪个 SSH 密钥推送提交,然后在收到提交之前对提交执行某些操作。所以剧本的大纲是..

#!/bin/sh
#
<Check key which was used from authorized_keys for the commit>
<Print email corresponding to the SSH key to a file as a log>
<Do some other stuff here>

但是由于服务器存储了 public 密钥,并且私钥用于推送提交,是否可以检查使用了哪个密钥?如果有怎么办?

抱歉,如果我遗漏了一些明显的东西,只是需要一些指导才能开始。

感谢任何帮助,谢谢。

问题是 gitolite is able to use the ssh key only because it uses the ssh "forced command" feature which allows you to register (in ~/.ssh/authorized-keys) a script () 将 运行 无论您最初指定哪个命令。

没有那个,如“Can I find out which ssh key was used to access an account?", you would need to parse the sshd logs, or to modify the ~/.ssh/authorized-keys in some ways (adding for instance environment variables”中所述。

您可以编辑 ~/.ssh/authorized_keys 文件以将环境变量或自定义命令包含到 运行 与每个键关联。

假设您的 authorized_keys 文件中有以下 public 键:

ssh-rsa AAAA.... usera@hosta
ssh-rsa AAAA.... usera@hostb
ssh-rsa AAAA.... userb@hostc

并且您希望能够获得与每个相关联的用户电子邮件。您可以编辑 authorized_keys 改为阅读:

environment="EMAIL=usera@example.com" ssh-rsa AAAA.... usera@hosta
environment="EMAIL=usera@example.com" ssh-rsa AAAA.... usera@hostb
environment="EMAIL=userb@example.com" ssh-rsa AAAA.... userb@hostc

现在在您的脚本中,您可以访问 EMAIL 变量:

#!/bin/sh

sendmail "$EMAIL" <<EOF
To: $EMAIL
From: admin@example.com

This is a test message
EOF

请注意,如果您信任您的用户,则应使用此机制以方便使用,如果您希望此机制不被破坏,则不应使用安全机制。如果您希望它是安全的以便用户无法篡改它,您需要使用强制命令功能,其中所有访问都通过一个包装命令,该命令只允许 运行 特定的 Git 命令。您可以为此编写自己的包装器,但如果您打算沿着这条路线走下去,只需使用 gitolite is probably the best solution. If you did want to implement this yourself, gitolite has a page explaining how it works.