Оболонка Git не ввімкнена?


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- обмежена оболонка, яка повинна використовуватися лише для функцій push / pull (тобто 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-command' у домашній каталог користувача, оболонкою якого є git-shell. Тоді кожен, хто ввійде в систему як цей користувач, зможе запускати виконувані файли в каталозі 'git-shell-command'.

Надані команди:

довідка: друкує назви доступних команд. При інтерактивному запуску, 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)
michael

4

я просто повинен був зробити # mkdir ~git/git-shell-commandsтоді su gitпрацювавgit 1.8.1.5-r1


1
Так, це працює. Тепер ти в оболонці git. Тоді що? Це абсолютно марно для взаємодії, якщо ви не посилаєтеся на деякі бінарні файли всередині 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.

Користувач повинен прочитати та виконати дозволи до каталогу для виконання програм у ньому.


... так само, як написано в повідомленні про помилку, насправді. (-:
JdeBP

@JdeBP: Вибачте;) @ Петер, і я гадаю, у вас є ~/git-shell-commandsправильні дозволи?
VonC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.