Vorgestern habe ich mal wieder ein Skript in PHP entwickelt, das auf ein Subversion Repository zugreift. Da wir dafür immer das Protokoll svn+ssh verwenden ist das Testen eines solchen Skripts unter Windows nicht ohne weiteres möglich. Zum einen ist Subversion nicht wie bei vielen Unix-Systemen vorinstalliert und zum anderen fehlt auch eine native Unterstützung für SSH-Verbindungen.
Das Nachrüsten von beidem ist zum Glück kein Problem. Ich habe mich für Apache Subversion und OpenSSH for Windows entschieden. Die Installation der beiden Pakete ist nicht besonders schwierig. Höchstens das Einfügen der Pfade zu den Binaries in die PATH Umgebungsvariable muss noch manuell vorgenommen werden. Dann kann man aber eine Verbindung über die Konsole zu einem Subversion-Server über das Protokoll svn+ssh herstellen.
Das Problem
Leider funktioniert eine Sache nicht wirklich „out oft he box“. Wir verwenden die Public-Key-Authentifizierung für den Zugriff per SSH und dabei werden die Schlüssel im Profilordner des Windows-Nutzers abgelegt. Alle Programme, die ich bisher verwendet habe, konnten diese Schlüssel auch finden. Nur OpenSSH wollte nicht so recht. Folgende Fehlermeldung erscheint dann beim Versuch, die Verbindung aufzubauen:
Could not create directory '/home/Administrator/.ssh'. Failed to add the host to the list of known hosts (/home/Administrator/.ssh/known_hosts).
Die Lösung
Ich konnte leider keine Lösung für genau dieses Problem finden, aber einige, die mich auf den richtigen Weg gebracht haben. OpenSSH sucht nämlich nicht im Home-Verzeichnis des Benutzers nach den Schlüsseln, sondern im Ordner /home/%USERNAME%/.ssh
innerhalb seines Installationsverzeichnisses. Wenn OpenSSH also z.B. unter C:\Program Files (x86)\OpenSSH
installiert ist, dann erwartet es einen Ordner wie C:\Program Files (x86)\OpenSSH\home\Administrator\.ssh
für die Schlüssel. Meine erste Lösung war es, genau so ein Verzeichnis zu erzeugen und die Schlüssel einfach dort hinein zu kopieren. Aber das ist nicht sehr elegant, denn die Schlüssel könnten sich ja ändern. Zusätzlich wird auch die Datei known_hosts
nicht aktualisiert. Die viel elegantere Lösung ist ein Symbolic Link (ja, das gibt es auch unter Windows) auf das Verzeichnis C:\Users
wo ja die Unterverzeichnisse schon existieren. Dazu müsst ihr einfach eine Konsole (cmd.exe) als Administrator starten und folgenden Befehl ausführen:
mklink /d "C:\Program Files (x86)\OpenSSH\home" "C:\Users"
Das war auch schon alles. Ab sofort findet OpenSSH die Dateien im vermeintlichen „home“ Verzeichnis und auch alle Änderungen sind sofort programmübergreifend sichtbar.
Ich hoffe der Tipp konnte auch euch helfen dieses leidige Problem zu lösen. Ich bin mal gespannt ob Windows 8 endlich mal ein paar grundlegende und wichtige Funktionen integriert. Dazu gehört für mich mindestens einmal SSH, aber auch GIT sollte auf einem modernen Betriebssystem nicht fehlen oder zumindest leicht installierbar sein. Man wird ja noch träumen dürfen 😉
Vielen Dank für diesen Hinweis! Ich habe bis heute auch nicht gewusst, dass Windows Links kann …
Freut mich, dass ich dir damit helfen konnte. Ich wusste auch lange Zeit nicht, dass Windows Symbolic Links kann und war sehr überrascht, als ich das rausgefunden habe. Damit kann man wirklich sehr viele nützliche Dinge machen.