假设在带有Git存储库的服务器上的〜/ .ssh / authorized_keys中有大量的ssh公钥,其格式为“user@mail.com”
我想为预接收挂钩编写bash脚本,它检查用于推送提交的SSH密钥,然后在收到之前对提交执行某些操作。所以脚本的轮廓将是......
divide_pay()
但是由于服务器存储公钥,私钥用于推送提交,是否可以检查使用了哪个密钥?如果是这样的话?
很抱歉,如果我遗漏了一些明显的东西,只需要一些方向即可开始。
感谢任何帮助,谢谢。
答案 0 :(得分:2)
您可以编辑~/.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。
答案 1 :(得分:0)
问题是 gitolite 只能使用ssh密钥,因为它使用ssh "forced command" feature允许您注册(~/.ssh/authorized-keys
)a脚本(the forced command)无论您最初指定哪个命令都将运行。
如果没有这个,如“Can I find out which ssh key was used to access an account?”中所述,您需要parse the sshd logs,或者以某种方式修改~/.ssh/authorized-keys
(例如添加environment variables)。