Frage Git-Shell nicht aktiviert?


Ich versuche, den Git-Server zu installieren. Wenn ich die Standard-Shell für meinen git-Benutzer auf / usr / bin / git-shell setze, erhalte ich bei der Anmeldung einen Fehler als git.

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

Ssh-Schlüssel basierte Zugriffsarbeit, Berechtigungen sind korrekt eingestellt.

Die Google-Suche zeigt diesen Fehler nicht an.

Ich habe diese Methode auch in früheren Installationen verwendet, und es wurde kein solcher Fehler angezeigt. Auch habe ich auf funktionierenden Server geschaut, wenn es einige zusätzliche Dateien oder eine Konfiguration hat, aber keine solche Sache.

Systemspezifikation:

  • Gentoo Linux (neueste)
  • Git 1.7.5.3

/ etc / passwd Zeile:

git:x:1002:1004::/home/git:/usr/bin/git-shell

22
2018-06-29 14:43


Ursprung


git-shell ist eine eingeschränkte Shell, die nur für die Push / Pull-Funktionalität verwendet wird (d. h. git push, git fetch und git pull). Es ist nicht interaktiv, Sie sollten sich also nicht in einer interaktiven Shell anmelden. Sie können es etwas interaktiv machen, indem Sie ein hinzufügen git-shell-commands Verzeichnis in der Heimat des Benutzers und Symlinking einige Binärdateien in. Aber es ist sehr begrenzt (es gibt keine Binärdatei für cdzum Beispiel), also ist eine bessere Alternative, sich einzuloggen als root oder ein sudofähigen Benutzer und tun sudo -u git -s um voll zu werden bash Shell unter der git Nutzer. - ADTC


Antworten:


Ich habe das gefunden, nachdem ich git-shell-Befehle gefunden habe

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

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

Bereitgestellte Befehle:

Hilfe: Gibt die Namen verfügbarer Befehle aus. Wenn ausgeführt   interaktiv wird git-shell automatisch 'help' beim Start ausführen,   sofern es existiert.

Liste: Zeigt ein beliebiges Repository an, dessen Name mit ".git" endet   Benutzer Heimverzeichnis. Keine anderen Git-Repositories sind sichtbar,   obwohl sie durch git-shell klonierbar sein könnten. "Liste" ist entworfen   um die Anzahl der Aufrufe an Git zu minimieren, die beim Finden gemacht werden müssen   verfügbare Repositories; Wenn Ihr Setup über zusätzliche Repositories verfügt   sollte benutzererkennbar sein, möglicherweise möchten Sie "Liste" ändern   entsprechend.

Also ich

[root@svn ~]# cp /usr/share/doc/git-1.7.4.4/contrib/git-shell-commands /home/git -R
[root@svn ~]# chown git:developers /home/git/git-shell-commands/ -R
[root@svn ~]# chmod +x /home/git/git-shell-commands/help
[root@svn ~]# chmod +x /home/git/git-shell-commands/list
[root@svn ~]# exit
[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 das Login funktioniert. :)


16
2017-10-27 20:22



es müsste in den Home-Verzeichnissen der Benutzer nackte Repositories für "list" geben, um irgendetwas zu tun (gemäß der Readme-Datei) - michael


Ich musste es einfach tun # mkdir ~git/git-shell-commands dann su git arbeitete für git 1.8.1.5-r1


5
2017-10-31 22:48



Arbeitete auch für mich - maurycy
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 symbolisieren einige Binärdateien darin git-shell-commands Mappe. Ich denke, es ist nützlicher, all das zu überspringen und zu tun sudo -u git -sdamit du voll wirst bash Shell mit Zugriff auf alle Binärdateien. Sie bleiben auch im aktuellen Verzeichnis. - ADTC


Wenn du sieh dir den Code an was löst diese Fehlermeldung aus (die scheint anders gewesen zu sein in älteren Versionen von 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."); 

Dies sollte ein richtiges Problem im git-shell-Verzeichnis sein.

Der Benutzer muss Berechtigungen für das Verzeichnis gelesen und ausgeführt haben, um das Verzeichnis ausführen zu können   Programme darin.


3
2017-07-01 12:15



... genau wie es in der Fehlermeldung heißt. (-: - JdeBP
@JdeBP: und ich nehme an, du hast es ~/git-shell-commands mit den richtigen Berechtigungen? - VonC
Du redest mit der falschen Person. - JdeBP
@JdeBP: sorry;) @Peter und ich nehme an du hast es ~/git-shell-commands mit den richtigen Berechtigungen? - VonC
Wo findest du die git-shell-Befehle?