是否可以通过ssh运行git服务器,使用authorized_keys
和command=
来限制只访问git存储库,而不使用gitosis / gitolite?
答案 0 :(得分:12)
是的,为所有只有git访问权限的用户分配git shell
作为登录shell。
答案 1 :(得分:9)
编辑:不确定所有突然的负面排名;我显然不是说使用Gitolite,因为OP特别要求不使用它。我只是说他要求的是Gitolite的微小源代码的95%,因此我告诉他在源代码中他可以找到他想要复制的片段来推送他自己的片段。
是的,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到机器,它不仅会终止会话,而是告诉你在终止之前你有权访问哪个存储库,如果它知道你是谁。
答案 2 :(得分:0)
您可以将其放在authorized_keys2
:
no-port-forwarding,no-agent-forwarding,command="/usr/bin/git-shell -c \"$SSH_ORIGINAL_COMMAND\""
那只允许在ssh上使用git命令,但是如果你需要乱用(来自其他帐户),你仍会让你成为那个用户:
sudo -u git -i