English ▾ Themen ▾ Neueste Version ▾ git-shell zuletzt aktualisiert in 2.18.0

NAME

git-shell - Eingeschränkte Login-Shell für SSH-Zugriff nur für Git

SYNOPSIS

chsh -s $(command -v git-shell) <user>
git clone <user>@localhost:/path/to/repo.git
ssh <user>@localhost

BESCHREIBUNG

Dies ist eine Login-Shell für SSH-Konten, um eingeschränkten Git-Zugriff zu ermöglichen. Sie erlaubt nur die Ausführung von serverseitigen Git-Befehlen, die die Pull/Push-Funktionalität implementieren, sowie benutzerdefinierte Befehle, die in einem Unterverzeichnis namens git-shell-commands im Home-Verzeichnis des Benutzers vorhanden sind.

BEFEHLE

git shell akzeptiert die folgenden Befehle nach der Option -c

git receive-pack <argument>
git upload-pack <argument>
git upload-archive <argument>

Ruft den entsprechenden serverseitigen Befehl auf, um die git push, git fetch oder git archive --remote Anforderung des Clients zu unterstützen.

cvs server

Imitiert einen CVS-Server. Siehe git-cvsserver[1].

Wenn ein Verzeichnis ~/git-shell-commands vorhanden ist, verarbeitet git shell auch andere, benutzerdefinierte Befehle, indem es "git-shell-commands/<befehl> <argumente>" aus dem Home-Verzeichnis des Benutzers ausführt.

INTERAKTIVE NUTZUNG

Standardmäßig können die oben genannten Befehle nur mit der Option -c ausgeführt werden; die Shell ist nicht interaktiv.

Wenn ein Verzeichnis ~/git-shell-commands vorhanden ist, kann git shell auch interaktiv (ohne Argumente) ausgeführt werden. Wenn ein help Befehl im Verzeichnis git-shell-commands vorhanden ist, wird dieser ausgeführt, um dem Benutzer einen Überblick über zulässige Aktionen zu geben. Dann wird eine "git> " Eingabeaufforderung angezeigt, an der man einen der Befehle aus dem Verzeichnis git-shell-commands oder exit eingeben kann, um die Verbindung zu schließen.

Im Allgemeinen wird dieser Modus als administrative Schnittstelle verwendet, um Benutzern zu erlauben, Repositories aufzulisten, auf die sie Zugriff haben, Repositories zu erstellen, zu löschen oder umzubenennen oder Repository-Beschreibungen und Berechtigungen zu ändern.

Wenn ein Befehl no-interactive-login existiert, wird dieser ausgeführt und die interaktive Shell wird abgebrochen.

BEISPIELE

Um interaktive Logins zu deaktivieren und stattdessen eine Begrüßung anzuzeigen

$ 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

Um den Zugriff auf git-cvsserver zu ermöglichen (was im Allgemeinen das obige Beispiel no-interactive-login als Voraussetzung haben sollte, da das Erstellen des Verzeichnisses git-shell-commands interaktive Logins ermöglicht)

$ 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

SIEHE AUCH

ssh(1), git-daemon[1], contrib/git-shell-commands/README

GIT

Teil der git[1] Suite