Git shell не включен?

24

Я пытаюсь установить сервер Git. Когда я устанавливаю оболочку по умолчанию для моего пользователя git на / usr / bin / git-shell, я получаю сообщение об ошибке при входе в систему как git.

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.

Доступ по ключу Ssh работает, права доступа установлены правильно.

Поиск Google не показывает ничего относительно этой ошибки.

Я также использовал этот метод в прошлых установках, и такая ошибка не отображалась. Также я посмотрел на работающий сервер, если у него есть дополнительные файлы или конфиг, но такого нет.

Системная спецификация:

  • Gentoo Linux (последняя версия)
  • Git 1.7.5.3

Строка / etc / passwd:

git:x:1002:1004::/home/git:/usr/bin/git-shell
Питер
источник
git-shellявляется ограниченной оболочки , которые будут использоваться для функциональности толчок / тянуть только (то есть git push, git fetchи git pull). Он не должен быть интерактивным, поэтому не следует входить в интерактивную оболочку. Вы можете сделать его несколько интерактивным, добавив git-shell-commandsкаталог в домашний каталог пользователя и вставив в него несколько ссылок. Но он очень ограничен (например, здесь нет двоичного файла cd), поэтому лучшей альтернативой является вход в систему от имени rootили sudoспособного пользователя и sudo -u git -sполучение полной bashоболочки под gitпользователем.
ADTC

Ответы:

17

Я нашел это после запуска locate git-shell-commands

cat /usr/share/doc/git-1.7.4.4/contrib/git-shell-commands/README

Примеры программ, вызываемых через git-shell. Поместите каталог с именем 'git-shell-команды' в домашний каталог пользователя, оболочкой которого является git-shell. Тогда любой, кто войдет в систему под этим пользователем, сможет запускать исполняемые файлы в каталоге 'git-shell-commands'.

Предоставленные команды:

help: Распечатывает имена доступных команд. При интерактивном запуске git-shell автоматически запускает «справку» при запуске, если она существует.

list: Отображает любой пустой репозиторий, имя которого заканчивается на «.git» в домашнем каталоге пользователя. Других репозиториев git не видно, хотя они могут быть клонированы через git-shell. «list» предназначен для минимизации количества обращений к git, которые необходимо выполнить при поиске доступных репозиториев; если в вашей настройке есть дополнительные репозитории, которые должны быть обнаружены пользователем, вы можете изменить «список» соответствующим образом.

Поэтому я выполнил следующие команды от имени root:

cp /usr/share/doc/git-1.7.4.4/contrib/git-shell-commands /home/git -R
chown git:developers /home/git/git-shell-commands/ -R
chmod +x /home/git/git-shell-commands/help
chmod +x /home/git/git-shell-commands/list
exit

Затем я смог запустить следующее как gitпользователь:

[me@svn ~]$ su git
Password:
Run 'help' for help, or 'exit' to leave.  Available commands:
list
git> help
Run 'help' for help, or 'exit' to leave.  Available commands:
list
git> list
git> exit

Сейчас я не вижу, что такое хорошая справка и список, но логин сработал. :)

Дэвид
источник
1
в домашних каталогах пользователей должны быть открытые репозитории, чтобы «список» мог что-либо делать (согласно readme)
майкл
4

я просто должен был сделать, # mkdir ~git/git-shell-commandsзатем su gitработал наgit 1.8.1.5-r1

pjammer
источник
1
Да, это работает. Теперь вы в git shell. И что? Это абсолютно бесполезно для взаимодействия, если вы не используете символические ссылки на некоторые файлы внутри git-shell-commandsпапки. Я думаю, что более полезно пропустить все это и сделать sudo -u git -sтак, чтобы вы получили полную bashоболочку с доступом ко всем двоичным файлам. Вы также остаетесь в текущем каталоге.
ADTC
3

Если вы посмотрите на код, который вызывает это сообщение об ошибке (которое в предыдущих версиях Git было другим ):

if (access(COMMAND_DIR, R_OK | X_OK) == -1) {
  die("Interactive git shell is not enabled.\n"
     "hint: ~/" COMMAND_DIR " should exist "
     "and have read and execute access."); 

это должно быть правильным вопросом в каталоге git-shell.

Пользователь должен иметь права на чтение и выполнение каталога, чтобы выполнять программы в нем.

VonC
источник
... как говорится в сообщении об ошибке. (-:
JdeBP
@JdeBP: извините;) @ Питер, и я полагаю, у вас есть ~/git-shell-commandsправа доступа?
VonC