Spec-Zone.ru › Git

git-shell

Имя

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

Синтаксис

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

Описание

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

Команды

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

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/<command> <arguments>" из домашнего каталога пользователя.

Интерактивное использование

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

Если присутствует каталог ~/git-shell-commands, git shell также может быть запущен в интерактивном режиме (без аргументов). Если команда help присутствует в каталоге git-shell-commands, она выполняется, чтобы предоставить пользователю обзор разрешенных действий. Затем появляется приглашение "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' "Hi $USER! You've successfully authenticated, but I do not"
printf '%s\n' "provide interactive shell access."
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

оболочка

© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-shell

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API