是否可能通过ssh运行git服务器,使用authorized_keys
和command=
限制访问只能访问git仓库,而不使用gitosis/gitolite呢?
是的,将git shell
分配为所有用户的登录shell,这些用户只能访问git。
编辑:不确定突然出现的负面评级是怎么回事;我显然没有建议使用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登录到该机器,则不仅会终止会话,而且在终止之前会告诉您可以访问哪些存储库,如果它知道您是谁。
您可以将以下内容放置在每行的开头,放置于authorized_keys2
文件中:
no-port-forwarding,no-agent-forwarding,command="/usr/bin/git-shell -c \"$SSH_ORIGINAL_COMMAND\""
这将只允许通过ssh使用git命令,但如果需要进行操作(从另一个帐户),仍然可以让您成为该用户:
sudo -u git -i