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



假设在带有Git存储库的服务器上~/.ssh/authorized_keys中有一个很大的ssh公钥列表,其通用格式为"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>

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

很抱歉,如果我遗漏了一些显而易见的东西,只需要一些指导就可以开始了。

感谢您的帮助。

您可以编辑~/.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有一个页面来解释它是如何工作的。

问题是gitolite之所以能够使用ssh密钥,只是因为它使用了ssh"强制命令"功能,该功能允许您(在~/.ssh/authorized-keys中)注册一个脚本(强制命令),无论您最初指定的是哪个命令,该脚本都将运行。

如果没有这一点,如"我能找出哪个ssh密钥用于访问帐户吗?"中所述,您将需要解析sshd日志,或者以某些方式修改~/.ssh/authorized-keys(例如添加环境变量)。

相关内容

  • 没有找到相关文章