Русский ▾ Topics ▾ Latest version ▾ git-shell last updated in 2.18.0

НАЗВАНИЕ

git-shell — Ограниченная оболочка входа для доступа только по SSH для Git

ОБЗОР

chsh -s $(command -v git-shell) <пользователь>
git clone <пользователь>@localhost:/путь/к/repo.git
ssh <пользователь>@localhost

ОПИСАНИЕ

Это оболочка входа в систему для учётных записей SSH, чтобы обеспечить ограниченный доступ к Git. Она разрешает выполнение только серверных команд Git, реализующих функциональность pull/push, а также пользовательских команд, присутствующих в подкаталоге с именем git-shell-commands в домашнем каталоге пользователя.

КОМАНДЫ

git shell принимает следующие команды после параметра -c:

git receive-pack <аргумент>
git upload-pack <аргумент>
git upload-archive <аргумент>

Вызывает соответствующую серверную команду для поддержки запроса клиента git push, git fetch или git archive --remote.

cvs server

Имитировать сервер CVS. См. git-cvsserver[1].

Если присутствует каталог ~/git-shell-commands, git shell также будет обрабатывать другие пользовательские команды, запуская "git-shell-commands/<команда> <аргументы>" из домашнего каталога пользователя.

ИНТЕРАКТИВНОЕ ИСПОЛЬЗОВАНИЕ

По умолчанию приведённые выше команды могут выполняться только с параметром -c; оболочка не является интерактивной.

Если присутствует каталог ~/git-shell-commands, git shell также может запускаться интерактивно (без аргументов). Если в каталоге git-shell-commands присутствует команда help, она запускается, чтобы предоставить пользователю обзор разрешённых действий. Затем отображается приглашение "git> ", в котором можно ввести любую из команд из каталога git-shell-commands или exit, чтобы закрыть соединение.

Обычно этот режим используется как административный интерфейс, чтобы позволить пользователям перечислять репозитории, к которым у них есть доступ, создавать, удалять или переименовывать репозитории, а также изменять описания репозиториев и права доступа.

Если существует команда no-interactive-login, то она запускается, и интерактивная оболочка прерывается.

ПРИМЕРЫ

Чтобы отключить интерактивные входы в систему, отображая вместо этого приветствие:

$ 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' "предоставляю интерактивный доступ к оболочке."
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 обрабатывает только \"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]