检查 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.
假设在具有 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.