Git

名称

git-shell - 仅限 Git SSH 访问的受限登录 shell

概述

chsh -s $(command -v git-shell) <用户>
git clone <用户>@localhost:/path/to/repo.git
ssh <用户>@localhost

描述

这是 SSH 账户的登录 shell,提供受限的 Git 访问权限。 它只允许执行实现拉/推功能的服务器端 Git 命令,以及用户主目录中名为 git-shell-commands 子目录下的自定义命令。

命令

git shell 接受在 -c 选项之后的下列命令:

git receive-pack <参数>
git upload-pack <参数>
git upload-archive <参数>

调用相应的服务器端命令,以支持客户端的 git pushgit fetchgit archive --remote 请求。

‘cvs 服务器’

模仿 CVS 服务器。 参见 git-cvsserver[1]

如果有 ~/git-shell-commands 目录,git shell 也会处理其他自定义命令,方法是从用户的主目录运行 "git-shell-commands/<命令> <参数>"。

交互式使用

默认情况下,上述命令只能通过 -c 选项执行;shell 不是交互式的。

如果有 ~/git-shell-commands 目录,git shell 也可以交互式运行(不带参数)。 如果 git-shell-commands 目录中有 help 命令,则会运行该命令向用户提供允许操作的概览。 然后会出现 "git>" 提示,用户可以在此输入`git-shell-commands`目录下的任何命令,或`exit`关闭连接。

一般情况下,该模式用作管理界面,允许用户列出他们可以访问的资源库,创建、删除或重命名资源库,或更改资源库说明和权限。

如果存在 no-interactive-login 命令,则运行该命令并终止交互式 shell。

实例

禁用交互式登录,显示问候语:

$ chsh -s /usr/bin/git-shell
$ mkdir $HOME/git-shell-commands
$ cat >$HOME/git-shell-commands/no-interactive-login <<\EOF
#!/bin/sh
printf '%s\n' "你好,$USER!您已成功通过身份验证,但我没有"
printf '%s\n' "提供交互式 shell 访问。"
exit 128
EOF
$ chmod +x $HOME/git-shell-commands/no-interactive-login

要启用 git-cvsserver 访问权限(一般应以上面的 no-interactive-login 示例为前提,因为创建 git-shell-commands 目录允许交互式登录):

$ cat >$HOME/git-shell-commands/cvs <<\EOF
if ! test $# = 1 && test "$1" = "server"
then
	echo >&2 "git-cvsserver only handles \"server\""
	exit 1
fi
exec git cvsserver server
EOF
$ chmod +x $HOME/git-shell-commands/cvs

参见

ssh(1), git-daemon[1], contrib/git-shell-commands/README

GIT

属于 git[1] 文档

scroll-to-top