SVN mit SSH
Ein Einsatzzweck, wenn nicht sogar der erste, war es, den Raspberry Pi als SVN-Server einzusetzen. Das erfordert nicht viele Ressourcen und ist eine perfekte Aufgabe für den Mini-Computer.
In diesem kleinen Tutorial erkläre ich nun die Installation von SVN und wie man sich mit Hilfe von SSH auf dem SVN-Server anmeldet.
Vorbereitung: SSH-Key erzeugen
Damit wir uns später einfach und sicher mit dem Raspberry Pi verbinden können, ist es erforderlich, dass wir einen SSH-Key-Paar erzeugen. Unter Mac OS X und Linux ist es sehr einfach mit dem Befehl
ssh-keygen -b 2048
möglich. Das erzeugt ein 2048 Bit Schlüsselpaar. Standardmäßig werden die Dateien im Verzeichnis ~/.ssh
abgelegt. Unter Windows kommt an dieser Stelle der PuTTYgen zum Einsatz.
Was weiter mit dem Schlüssel passiert, steht dann weiter unten.
Installation
Für den Betrieb eines SVN-Server muss nur das Paket subversion
installiert werden.
sudo apt-get install subversion
Einrichtung des Benutzers
Damit wir den Betrieb des SVN-Servers von dem restlichen System etwas abgrenzen können, richten wir einen neuen Benutzer ein.
pi@raspberrypi ~ $ sudo adduser svnuser
Lege Benutzer »svnuser« an ...
Lege neue Gruppe »svnuser« (1014) an ...
Lege neuen Benutzer »svnuser« (1011) mit Gruppe »svnuser« an ...
Erstelle Home-Verzeichnis »/home/svnuser« ...
Kopiere Dateien aus »/etc/skel« ...
Geben Sie ein neues UNIX-Passwort ein:
Geben Sie das neue UNIX-Passwort erneut ein:
passwd: Passwort erfolgreich geändert
Benutzerinformationen für svnuser werden geändert.
Geben Sie einen neuen Wert an oder drücken Sie ENTER für den Standardwert
Vollständiger Name []:
Zimmernummer []:
Telefon geschäftlich []:
Telefon privat []:
Sonstiges []:
Sind die Informationen korrekt? [J/n] j
Dieser sollte ein Passwort bekommen (wie immer ist zu beachten, dass keine Ausgabe erfolgt). Alle weiteren Angaben sind dann optional.
Wie wir sehen, wurde automatisch bereits auch die Gruppe svnuser mit angelegt.
Nun können wir uns mit logout
ausloggen und den neuen Login ausprobieren (raspberrypi
ist in diesem Beispiel der Name des Raspberry Pis).
ssh svnuser@raspberrypi
Sind wir eingeloggt, legen wir im Home-Verzeichnis das Verzeichnis .ssh
an und wechseln hinein.
svnuser@raspberrypi ~ $ mkdir .ssh && cd .ssh
svnuser@raspberrypi ~/.ssh $
Nun legen wir hier eine Datei authorized_keys
an.
nano authorized_keys
Diese wird alle öffentlichen Schlüssel (Public keys) von unseren Benutzern beinhalten, die sich auf unserem SVN-Server anmelden wollen.
Für jeden Benutzer fügen wir nun so eine Zeile ein:
command="svnserve -t -r /var/repos --tunnel-user=user",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa [...]
Was bedeutet das? Das, was hinter command
kommt, ist ein Befehl, der ausgeführt wird, wenn sich ein Benutzer per SSH mit unserem SVN-Server verbindet. In diesem Fall wird also das Programm svnserve
ausgeführt. Diesem folgen einige Parameter, die auf der man page für svnserve
auch nachgelesen werden können.
-t zeigt an, dass das Programm im Tunnelmodus betrieben wird.
-r setzt das Wurzelverzeichnis, in das beim Verbinden gewechselt wird. Hier ist es /var/repos
, das wir noch anlegen müssen.
--tunnel-user überschreibt den Benutzernamen, mit dem wir uns verbunden haben. Dies ist sinnvoll, wenn wir mehrere Benutzer haben, die sich mit unserem Server verbinden wollen und später in den Logs nicht immer nur svnuser auftauchen soll, sondern eine unterschiedliche Kennung für jeden Benutzer. Die Alternative wäre, dass wir für jeden Benutzer einen eigenen Linux-Account anlegen.
Die weiteren Schalter no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty
zeigen unter anderem an, dass der Benutzer keinen Zugriff auf die Konsole oder den Desktop bekommen soll.
Anstelle der drei Punkte [...]
müssen wir nun den Public Key einfügen, den wir weiter oben erzeugt haben. Wichtig dabei ist, dass alles (von command
bis zum Ende des Schlüssels) auf einer Zeile steht! Für weitere Benutzer können neue Zeilen eingefügt werden.
Nun müssen wir noch die Berechtigungen für das Verzeichnis und die Datei setzen:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
Danach können wir uns wieder abmelden und mit unserem Standard-Account (in meinem Fall pi
) anmelden.
Damit sich der Benutzer svnuser
nicht direkt an der Konsole anmelden kann, sollten wir ihn sperren.
sudo passwd -l svnuser
Dies betrifft aber nur die Anmeldung an der Konsole mit Benutzername und Passwort.
Anlegen des Verzeichnisses
Wie bereits weiter oben beschrieben, sollen die einzelnen Repositories in einem extra Verzeichnis liegen. Dazu erzeugen wir das erwähnte Verzeichnis
sudo mkdir /var/repos
Dieses Verzeichnis ist nun natürlich unter dem root
-Account angelegt und damit hat auch nur dieser Zugriff darauf. Also müssen wir noch die Zugriffsrechte ändern:
sudo chown svnuser:svnuser /var/repos
Anlegen eines Repositories
Ein einzelnes Repository legen wir mit
sudo svnadmin create /var/repos/reponame
an, wobei reponame durch einen entsprechenden Namen ersetzt werden kann. Auch hier müssen noch die Zugriffrechte geändert werden.
sudo chown -R svnuser:svnuser /var/repos/reponame
sudo chmod -R 770 /var/repos/reponame
Das war's auch schon. Nun können wir mit dem neuen Repository arbeiten. Testen können wir es an unserem Computer mittels
svn co svn+ssh://svnuser@raspberrypi/reponame ~/temp/