如何确定在 Git 挂钩中使用的客户端 SSH 指纹
How to determine SSH fingerprint of client for usage in Git hook
我有一个 Git update
钩子,它检查正在更新的分支是否是主分支,如果是,则向客户端发送错误消息。我现在想做到只有 push
es 掌握我自己做的才能通过。
目前我有两个 SSH 密钥添加到用户 git
的 authorized_keys
。其中一个是我的,我打算添加其他的。我读 here:
If you’ve allowed everyone to connect with a single user (like “git”) via public-key authentication, you may have to give that user a shell wrapper that determines which user is connecting based on the public key, and set an environment variable accordingly.
但是他们没有解释如何做到这一点,而且我找不到任何关于如何做这样的事情的例子。您如何确定正在 SSH 的机器的指纹?我还考虑过创建一个单独的 "git-admin" 用户帐户,但是裸仓库在 /home/git 目录中,我想不出如何让两个用户使用相同的 url。我不能让用户共享相同的主目录,因为那样 authorized_keys
将适用于两者,而且我没有任何方法可以只为一个而不是另一个设置环境变量。
我的服务器 运行 在 FreeBSD 上。
关于如何实现我想要做的事情有什么想法吗?
这叫做ssh forced command, and is used for instance by gitolite
您可以:
在服务器端安装gitolite,它利用了本地 ssh 功能,并且可以限制对某些分支的写入(推送)访问。
这是一个 authorization layer, and you can test for access for specific branches.
if gitolite access -q reponame username W master
then
...
或修改您的~/.ssh/authorized_keys
以添加强制命令,即在任何 ssh调用上调用的脚本,然后可以测试哪个密钥参与该呼叫,识别您并让命令通过。
这就是 "ssh forced command" 所代表的(与 Git 无关)
我有一个 Git update
钩子,它检查正在更新的分支是否是主分支,如果是,则向客户端发送错误消息。我现在想做到只有 push
es 掌握我自己做的才能通过。
目前我有两个 SSH 密钥添加到用户 git
的 authorized_keys
。其中一个是我的,我打算添加其他的。我读 here:
If you’ve allowed everyone to connect with a single user (like “git”) via public-key authentication, you may have to give that user a shell wrapper that determines which user is connecting based on the public key, and set an environment variable accordingly.
但是他们没有解释如何做到这一点,而且我找不到任何关于如何做这样的事情的例子。您如何确定正在 SSH 的机器的指纹?我还考虑过创建一个单独的 "git-admin" 用户帐户,但是裸仓库在 /home/git 目录中,我想不出如何让两个用户使用相同的 url。我不能让用户共享相同的主目录,因为那样 authorized_keys
将适用于两者,而且我没有任何方法可以只为一个而不是另一个设置环境变量。
我的服务器 运行 在 FreeBSD 上。
关于如何实现我想要做的事情有什么想法吗?
这叫做ssh forced command, and is used for instance by gitolite
您可以:
在服务器端安装gitolite,它利用了本地 ssh 功能,并且可以限制对某些分支的写入(推送)访问。
这是一个 authorization layer, and you can test for access for specific branches.if gitolite access -q reponame username W master then ...
或修改您的
~/.ssh/authorized_keys
以添加强制命令,即在任何 ssh调用上调用的脚本,然后可以测试哪个密钥参与该呼叫,识别您并让命令通过。
这就是 "ssh forced command" 所代表的(与 Git 无关)