您可以在 .ssh/authorized_keys 中指定 git-shell 以限制仅通过 ssh 访问 git 命令吗?

Mat*_*lly 40 ssh git

我希望能够使用 ssh 密钥进行身份验证,但仍然限制可以通过 ssh 隧道执行的命令。

使用 Subversion,我通过使用 .ssh/authorized_keys 文件实现了这一点,例如:

command="/usr/local/bin/svnserve -t --tunnel-user matt -r /path/to/repository",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABIetc...
Run Code Online (Sandbox Code Playgroud)

我已经在命令中使用“/usr/bin/git-shell”尝试过这个,但我只是得到了时髦的旧fatal: What do you think I am? A shell?错误消息。

小智 40

我可以直接在authorizedKeys 文件中成功使用git-shell,而无需使用额外的脚本。

关键是\"在 env 变量周围添加。

在 rhel6 openssh-server-5.3p1-70.el6.x86_64 中测试:

no-port-forwarding,no-agent-forwarding,command="git-shell -c \"$SSH_ORIGINAL_COMMAND\"" ssh-dss AAAA...
Run Code Online (Sandbox Code Playgroud)

  • 就个人而言,我会给出“git-shell”的完整路径,但这可能只是偏执狂。 (2认同)

Nei*_*hew 33

以下对我有用。

~/.ssh/authorized_keys

command="./gitserve",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-dss AAAAB…
Run Code Online (Sandbox Code Playgroud)

~/gitserve脚本中:

#!/bin/sh
exec git-shell -c "$SSH_ORIGINAL_COMMAND"
Run Code Online (Sandbox Code Playgroud)

请注意,如果你把gitserve比主目录之外的某个地方,你将不得不调整command="./gitserve"参数authorized_keys


小智 5

通过更换生产线,Grawity的解决方案可以很容易地修改为工作

        exec $SSH_ORIGINAL_COMMAND
Run Code Online (Sandbox Code Playgroud)

与线

        git-shell -c "$SSH_ORIGINAL_COMMAND"
Run Code Online (Sandbox Code Playgroud)

引号处理了上面报告的问题,用 git-shell 替换 exec 似乎更安全一些。