Ich möchte in der Lage sein, einen SSH-Schlüssel zur Authentifizierung zu verwenden, aber trotzdem die Befehle einschränken, die über den SSH-Tunnel ausgeführt werden können.
Mit Subversion habe ich dies erreicht, indem ich eine .ssh / authorized_keys-Datei wie die folgende verwendet habe:
command="/usr/local/bin/svnserve -t --tunnel-user matt -r /path/to/repository",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABIetc...
Ich habe dies mit "/ usr / bin / git-shell" im Befehl versucht, aber ich bekomme nur die funky alte fatal: What do you think I am? A shell?
Fehlermeldung.
/bin/bash
?Ich konnte git-shell erfolgreich direkt in der authorizedKeys-Datei verwenden, ohne ein zusätzliches Skript zu verwenden.
Der Schlüssel ist, um die
\"
Umgebungsvariable hinzuzufügen .Getestet in rhel6 openssh-server-5.3p1-70.el6.x86_64:
quelle
git-shell
, aber das könnte nur Paranoia sein.Die Lösung von Grawity kann durch Ersetzen der Leitung problemlos geändert werden
mit der Linie
Die Anführungszeichen kümmern sich um die oben genannten Probleme, und das Ersetzen von exec durch git-shell scheint etwas sicherer zu sein.
quelle
git-shell
soll als Login-Shell verwendet werden, so dass es-c "originalcommand"
als Argumente erhalten würde . Dies ist bei "erzwungenen Befehlen" in OpenSSH nicht der Fall. Stattdessen wird der erzwungene Befehl an die konfigurierte Shell übergeben.Sie können ein Skript schreiben, das es überprüft
$SSH_ORIGINAL_COMMAND
und ausführt. Beispiel in Bash :quelle
git <cmd>
, nicht wahrgit-<cmd>
?man git-shell
(git 1.7.3.4): Derzeit dürfen nur vier Befehle aufgerufen werden, git-receive-pack, git-upload-pack und git-upload-archive mit einem einzigen erforderlichen Argument, oder cvs server (um git aufzurufen) -cvsserver).$SSH_ORIGINAL_COMMAND
werden ungültig und verursacht,git-shell
um heraus zu brennen :-(Ich konnte die Lösung von grawity aus demselben Grund nicht zum Laufen bringen , der von Neil Mayhew gemeldet wurde (dh die einzelnen Anführungszeichen, die vom git-Client gesendet wurden und eine ungültige verursachen
$SSH_ORIGINAL_COMMAND
- ich verwendegit v1.7.x
).Die folgende von @moocode implementierte Lösung funktioniert jedoch nur:
https://moocode.com/posts/6-code-your-own-multi-user-private-git-server-in-5-minutes
Ruby FTW! :-)
quelle
Der Vollständigkeit halber und da in der ursprünglichen Frage nicht angegeben war, dass dasselbe Konto für Nicht-Git-Dinge verwendet werden muss, ist die offensichtliche Antwort, dass
git-shell
es so verwendet wird, wie es entworfen wurde: Legen Sie es als Anmeldeshell fest (dh mitusermod
, in/etc/passwd
) für diesen SSH-Benutzer.Wenn Sie ein einzelnes Benutzerkonto haben, das Sie auf zwei Arten verwenden möchten:
... dann gelten die anderen Antworten in diesem Thread. Wenn Sie es sich jedoch leisten können, git einen separaten Benutzer zuzuweisen,
git-shell
ist das Festlegen der Shell die einfachste Möglichkeit, diese einzuschränken, und sie ist etwas sicherer, da keine zusätzlichen Shell-Skripte erforderlich sind.quelle