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