Vor einiger Zeit habe ich hier im Blog beschrieben, wie man einen SVN-Server mit SSH-Zugang einrichtet. Die Nutzung eines derartigen Accounts unter macOS und Linux ist vollkommen unkompliziert, zum erstmaligen Aus-Checken reicht ein Kommando:
svn co svn+ssh://<user-name>@<host-name>/home/svn-repos/mein-projekt
Danach cd mein-projekt
, svn update
, svn add datei
, svn commit -m 'bla bla'
etc.
Was aber, wenn auf dem Client-Rechner Windows läuft? Dann ist — wie immer — alles ein wenig komplizierter. Diese Anleitung zeigt, wie Sie mit Putty und TortoiseSVN ans Ziel kommen.
TortoiseSVN
Mit TortoiseSVN existiert für Windows ein sehr komfortabler SVN-Client. Allerdings handelt es sich dabei nicht um ein Programm mit eigenständiger Benutzeroberfläche; vielmehr integriert sich TortoiseSVN in den Datei-Manager (Windows Explorer) ein und wird dort über Kontextmenükommandos gesteuert.
Um erstmalig den SVN-Dateibaum herunterzuladen, öffnen Sie im Datei-Manager ein Verzeichnis (z.B. »Dokumente«, führen per Kontextmenü SVN Checkout aus. Als URL geben Sie gemäß dem Beispiel aus SVN-Server für den SSH-Zugriff einrichten die Zeichenkette svn+ssh://<user-name>@<host-name>/home/svn-repos/mein-projekt
an.
TortoiseSVN fragt nun zweimal nach dem SSH-Passwort und richtet dann das Projektverzeichnis ein. Für dieses Verzeichnis können Sie in der Folge per Kontextmenü SVN Checkout und SVN Commit ausführen. Für neue Dateien in diesem Verzeichnis können Sie nun TortoiseSVN / Add ausführen. Bei Dateien, die bereits unter SVN-Kontrolle sind, fällt das Menü wesentlich ausführlicher aus.
Bis hierher funktioniert TortoiseSVN ausgesprochen gut, selbst Kommandozeilen-verliebte Leute wie ich könnten sich damit anfreunden :-) Lästig ist aber, dass das SSH-Passwort immer wieder neu eingegeben werden muss. Die Lösung unter Linux bestünde darin, mit ssh-keygen
einen nicht durch ein Passwort gesicherten Schlüssel einzurichten und den öffentlichen Teil mit ssh-copy-id
zum SSH-Server hochzuladen. Zwei Kommandos, Zeitaufwand: 20 Sekunden. Diese Kommandos stehen unter Windows aber leider nicht zur Verfügung.
Hinweis: Sowohl
ssh-copy-id
als auch die im folgenden beschriebene Vorgehensweise setzen voraus, dass der SSH-Login nicht nur für SVN verwendet werden kann, sondern auch zum lokalen Arbeiten auf dem Server. Die SVN-Server-Konfigurationsvariante mitlshell
ist dazu nicht geeignet.
SSH-Authentifizierung per Schlüssel
Aber wo ein Wille ist, ist auch ein Weg, selbst unter Windows. Um dort einen für SSH geeigneten Schlüssel einzurichten, laden Sie PuTTYgen.exe herunter und führen das Programm aus. Mit Generate erzeugen Sie den neuen Schlüssel, wobei Sie alle Voreinstellungen belassen. Mit Save public key speichern Sie dann den öffentlichen Teil des Schlüssel in einer Textdatei, den privaten (geheimen) Schlüssel in einer PPK-Datei.
Als nächsten müssen Sie den öffentlichen Schlüssel in Textform der Datei /home/<ihrlogin>/.ssh/authorized_keys
auf dem Server hinzufügen. Dazu stellen Sie mit PuTTY eine SSH-Verbindung zum Server her. Dort testen Sie zuerst, ob die Datei authorized_keys
schon existiert. Ist das nicht der Fall, führen Sie via PuTTY die folgenden Kommandos aus:
mkdir .ssh
touch .ssh/authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
Anschließend öffnen Sie authorized_keys
mit einem Texteditor (z.B. nano
), kopieren aus PuTTYgen oder aus der zuvor eingerichteten Textdatei den öffentlichen Schlüssel und fügen diese via PuTTY in die Datei ein. Achten Sie darauf, dass Sie den gesamten öffentlichen Schlüssel in einer Zeile einfügen. Wenn authorized_keys
bisher nicht existierte, muss die Datei anschließend so ähnlich wie das folgende Muster aussehen:
ssh-rsa AAAAB3...4ES5N6 rsa-key-20161106
Der Sinn dieser Aktion besteht darin, dass PuTTY in Zukunft überprüfen kann, ob der öffentliche Teil des Schlüssels auf dem SSH-Server mit dem privaten Schlüssel übereinstimmt. Für diese Art der Authentifizierung müssen Sie in PuTTY ein neues Profil mit den folgenden Einstellungen einrichten:
- Hostname =
username@host-name
- Private key file =
C:\Users\ihrname\wo-auch-immer\privatekey.ppk
Nachdem Sie alles konfiguriert haben, kehren Sie nochmals in das Sessions-Dialogblatt zurück und klicken auf Save.
Wenn bis dahin keine Fehler passiert sind, gelingt nun mit einem Doppelklick auf die neu eingerichtete Session der SSH-Verbindungsaufbau zum Server — ohne Login. (Damit sollte hoffentlich auch klar sein, dass die private Schlüsseldatei wirklich privat bleiben soll. Wem auch immer die Datei in die Hände gerät, er/sie kann nun ebenfalls ohne Passwort einen Login durchführen!)
Die PuTTY-Session in TortoiseSVN nutzen
Vielleicht haben Sie sich zwischendurch schon gefragt, wozu der ganze Aufwand mit PuTTY dienen soll. Die Antwort ist einfach: TortoiseSVN kann die in einer PuTTY-Session gespeicherten Einstellungen verarbeiten! Dazu nennen Sie ihr bisheriges SVN-Verzeichnis in svn-backup
um und führen dann im Windows Explorer neuerlich per Kontextmenü SVN Checkout aus. Diesmal geben Sie die URL aber in dieser Form an:
svn+ssh://user-name@putty-session-name/home/svn-repos/mein-projekt
Entscheidend ist, dass Sie statt dem Hostnamen den Namen der PuTTY-Session verwenden!
Wenn alles gut geht, gelingt TortoiseSVN nun der Verbindungsaufbau ohne lange Passwort-Fragerei — sowohl jetzt, als auch in Zukunft.
Quellen / Links
- https://kofler.info/svn-server-fuer-den-ssh-zugriff-einrichten
- http://www.cheat-sheets.org/saved-copy/subversion-cheat-sheet-v1.pdf
- https://tortoisesvn.net/index.de.html
- https://tortoisesvn.net/ssh_howto_logemann.html
- http://www.putty.org
- https://www.howtoforge.com/how-to-configure-ssh-keys-authentication-with-putty-and-linux-server-in-5-quick-steps
- https://kb.site5.com/shell-access-ssh/putty/how-to-generate-ssh-keys-and-connect-to-your-account-with-putty