在没有gitosis/gitolite的情况下通过SSH运行“安全”的git服务器?

13

是否可能通过ssh运行git服务器,使用authorized_keyscommand=限制访问只能访问git仓库,而不使用gitosis/gitolite呢?

3个回答

12

是的,将git shell分配为所有用户的登录shell,这些用户只能访问git。


非常感谢您的帮助! - Danyun Liu

9

编辑:不确定突然出现的负面评级是怎么回事;我显然没有建议使用Gitolite,因为OP明确要求不使用它。我只是说他所要求的95%功能正好是Gitolite微小源代码的功能,因此我告诉他在哪里可以找到他想要复制以创建自己的代码片段。


是的,Gitolite正好做到了这一点。它也不会替换用户的shell。

cat ~/.ssh/authorized_keys
command="/home/git/.gitolite/src/gl-auth-command jbruce",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAD3NzaC1yc2EABBBCIwAAAQEAtRFmADxUSCX97CS/Uh7/N0y0vL...

请注意,这看起来不像服务器上的普通authorized_keys文件。它还将用户名作为参数传递,以便执行脚本知道此ssh密钥属于谁。不切换用户的shell(同时仍保持安全性)的附加好处是,如果您尝试直接通过ssh登录到该机器,则不仅会终止会话,而且在终止之前会告诉您可以访问哪些存储库,如果它知道您是谁。


1
正如标题所示,我实际上宁愿避免使用gito*。这是一个小项目,不需要那些工具提供的任何功能。 - David Wolever
4
David,重点是看一下gitolite的做法,因为这正是你所要求的(authorized_keys和command=)。将用户名传递给command=是一个很棒的想法,这样你就可以将用户与更多东西关联起来,而不仅仅是ssh-key。选择你喜欢的部分或从头开始学习它。 - Mauvis Ledford

0

您可以将以下内容放置在每行的开头,放置于authorized_keys2文件中:

no-port-forwarding,no-agent-forwarding,command="/usr/bin/git-shell -c \"$SSH_ORIGINAL_COMMAND\"" 

这将只允许通过ssh使用git命令,但如果需要进行操作(从另一个帐户),仍然可以让您成为该用户:

sudo -u git -i

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接