【发布时间】:2013-04-13 08:59:46
【问题描述】:
是否可以通过 ssh 运行 git 服务器,使用 authorized_keys 和 command= 来限制仅访问 git 存储库,而不使用 gitosis/gitolite?
【问题讨论】:
是否可以通过 ssh 运行 git 服务器,使用 authorized_keys 和 command= 来限制仅访问 git 存储库,而不使用 gitosis/gitolite?
【问题讨论】:
是的,将git shell 指定为所有用户的登录shell,这些用户只能拥有git 访问权限。
【讨论】:
command="…",但至少它告诉我要寻找什么。谢谢。
编辑:不确定所有突然的负面排名;我显然不是说要使用 Gitolite 作为 OP 特别要求不要使用它。我只是说他要求的是 Gitolite 微小源代码的 95%,因此我告诉他在源代码的哪里可以找到他想要复制的 sn-p。
是的,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
【讨论】: