假设在具有 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/