Git-Shell nicht aktiviert?

24

Ich versuche, Git-Server zu installieren. Wenn ich die Standard-Shell für meinen Git-Benutzer auf / usr / bin / git-shell setze, erhalte ich eine Fehlermeldung, wenn ich mich als Git anmelde.

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

SSH-Schlüssel Zugriff funktioniert, Berechtigungen sind richtig eingestellt.

In der Google-Suche wird zu diesem Fehler nichts angezeigt.

Ich habe diese Methode auch in früheren Installationen verwendet und es wurde kein solcher Fehler angezeigt. Ich habe mir auch den funktionierenden Server angesehen, wenn er einige zusätzliche Dateien oder eine Konfiguration hat, aber keine solche.

Systemspezifikation:

  • Gentoo Linux (aktuell)
  • Git 1.7.5.3

/ etc / passwd Zeile:

git:x:1002:1004::/home/git:/usr/bin/git-shell
Peter
quelle
git-shellist eine eingeschränkte Shell für Push / Pull - Funktionalität nur (dh verwendet werden git push, git fetchund git pull). Es soll nicht interaktiv sein, daher sollten Sie sich nicht in einer interaktiven Shell anmelden. Sie können es etwas interaktiver gestalten, indem Sie ein git-shell-commandsVerzeichnis in der Startseite des Benutzers hinzufügen und einige Binärdateien darin verknüpfen. Aber es ist sehr begrenzt (es gibt cdzum Beispiel keine Binärdatei für ), daher ist es eine bessere Alternative, sich als rootoder als sudofähiger Benutzer anzumelden und sudo -u git -seine vollständige bashShell unter den gitBenutzer zu bekommen.
ADTC

Antworten:

17

Ich fand das nach dem Laufen locate git-shell-commands

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

Beispielprogramme, die über Git-Shell aufgerufen werden können. Legen Sie ein Verzeichnis mit dem Namen 'git-shell-commands' in das Ausgangsverzeichnis eines Benutzers, dessen Shell git-shell ist. Dann kann jeder, der sich als dieser Benutzer anmeldet, ausführbare Dateien im Verzeichnis 'git-shell-commands' ausführen.

Bereitgestellte Befehle:

help: Gibt die Namen der verfügbaren Befehle aus. Bei interaktiver Ausführung führt git-shell beim Start automatisch "help" aus, sofern vorhanden.

list: Zeigt alle Bare-Repositorys an, deren Name im Ausgangsverzeichnis des Benutzers mit ".git" endet. Es sind keine anderen Git-Repositorys sichtbar, obwohl sie möglicherweise über die Git-Shell klonbar sind. 'list' wurde entwickelt, um die Anzahl der Anrufe zu minimieren, die bei der Suche nach verfügbaren Repositories getätigt werden müssen. Wenn Ihr Setup über zusätzliche Repositorys verfügt, die vom Benutzer gefunden werden können, können Sie die Liste entsprechend ändern.

Also habe ich die folgenden Befehle als root ausgeführt:

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

Ich konnte dann als gitBenutzer Folgendes ausführen :

[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

Jetzt sehe ich nicht, was gute Hilfe und Liste sind, aber der Login hat funktioniert. :)

David
quelle
1
es würde nackte Repositorys in dem Benutzer Home - Verzeichnisse für ‚Liste‘ tun , was (nach der readme) sein muß
michael
4

Ich habe gerade zu tun , # mkdir ~git/git-shell-commandsdann su gitarbeitetegit 1.8.1.5-r1

pjammer
quelle
1
Ja, es funktioniert. Jetzt bist du in der Git-Shell. Dann was? Es ist völlig nutzlos für die Interaktion, es sei denn, Sie verknüpfen einige Binärdateien im git-shell-commandsOrdner. Ich denke, es ist sinnvoller, all das zu überspringen, sudo -u git -sdamit Sie eine vollständige bashShell mit Zugriff auf alle Binärdateien erhalten. Sie bleiben auch im aktuellen Verzeichnis.
ADTC
3

Wenn Sie sich den Code ansehen, der diese Fehlermeldung auslöst (was in älteren Versionen von Git anscheinend anders war ):

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."); 

Dies sollte ein richtiges Problem im Git-Shell-Verzeichnis sein.

Der Benutzer muss über Lese- und Ausführungsberechtigungen für das Verzeichnis verfügen, um die darin enthaltenen Programme ausführen zu können.

VonC
quelle
... so wie es in der Fehlermeldung steht. (-:
JdeBP
@JdeBP: sorry;) @Peter und ich nehme an du hast ~/git-shell-commandsmit den richtigen Berechtigungen?
Vom