git - 检查 authorized_keys 以查看哪个 key 用于推送提交

标签 git bash ssh git-bash authorized-keys

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

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

#!/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>

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

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

感谢任何帮助,谢谢。

最佳答案

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

假设您的 authorized_keys 文件中有以下公钥:

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可能是最好的解决方案。如果您确实想自己实现,gitolite has a page explaining how it works .

关于git - 检查 authorized_keys 以查看哪个 key 用于推送提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34324151/

相关文章:

git - git push 后本地执行 Hook ?

git - 无法添加空文件夹

bash - shell 管道的惰性(非缓冲)处理

ssh - Ansible 是否为剧本中的每个任务创建单独的 SSH 连接

linux - 通过伪 tty 终端的 SSH 和 sudo

git - 如何重置 sshd_config 配置文件

git:如何查看分支中所做的更改

linux - Git 不添加我的文件,即使我添加了它们

linux - 将带空格的字符串作为参数传递给函数

linux - sed - 没有那个文件或目录