Eigentlich ist es kein so ungewöhnliches Szenario: Ich möchte mehreren Personen Zugriff auf ein SVN-Repository ermöglichen, damit wir über einen Ort verfügen, an dem immer die aktuellsten Versionen von Dokumenten liegen und diese nicht umständlich über USB-Stick oder per Mail ausgetauscht werden müssen. Die Verbindung sollte möglichst verschlüsselt sein. Dafür bietet Subversion die Möglichkeit, über SSH auf das Repository zuzugreifen.
Kaum gedacht, schon habe ich einen User ohne Shell angelegt, dazu ein Zertifikat und ab dafür. Schön wärs. Mit der Meldung, der Server würde den Schlüssel nicht akzeptieren, verabschiedete sich der SSH-Client, der von Subversion aufgerufen wurde. Nach mehreren neuen Schlüsseln, stellte sich heraus, dass es wunderbar funktionierte, wenn ich dem User eine Shell zuwies.
Der Suchmaschine sei Dank, habe ich für dieses unschöne Problem eine Lösung gefunden. Dem User bleibt eine Shell zugewiesen, allerdings gibt man dem SSH-Daemon noch ein paar Befehle mit, um den Shell-Zugriff einzuschränken. Folgendes trägt man vor dem Schlüsseltyp in der Datei authorized_keys ein:
command="/usr/bin/svnserve -t -r /home/user/svn/",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty
Offensichtlich startet der Client erstmal den SVN-Server auf der entfernten Maschine, falls dieser nicht schon läuft, ohne Shell geht das schief. Die Lösung funktioniert nur, wenn man sich per Public-Key-Authentication einloggen kann. Sinnvollerweise ist das aber sowieso aktiviert und der passwortbasierte Login deaktiviert.