Mal wieder ein kleiner Tipp aus der Praxix: Wie bringt man git dazu, einen alternativen Port zu benutzten, wenn man per SSH auf einen Server zugreifen möchte? Eigentlich ist die Sache ganz einfach:
git clone ssh://server.example.org:1234:/pfad/repo.git
Das sollte unter Linux funktionieren, hat aber hier (Xubuntu 14.04) nicht geklappt. Unter Windows klappt das gar nicht, weil der dort benutzte SSH-Client ziemlich beschränkt ist.
Die Lösung für dieses Problem? Die ssh-config!
SSH hat eine wunderbare Konfigurationsdatei, und dort kann man Aliase anlegen, und dort z.B. auch einen alternativen Port hinterlegen. Diese Datei findet man unter Linux unter ~/.ssh/config und unter Windows unter C:\Benutzer\<Name>\.ssh\config Es kann sein, dass es diese Datei noch nicht gibt und das der Ordner .ssh versteckt ist. Achtung: Die Datei hat keine Endung, wenn man die Datei also unter Windows etwa mit Notepad angelegt aufpassen, dass man ihr nicht versehentlich eine .txt-Endung verpasst. (Dazu beim Speichern den Dateityp auf „Alle Dateien“, nicht „Textdateien“ stellen.
Wie sieht so eine Datei nun aus? Beispielsweise so:
Host server1 HostName server.example.org Port 1234
Ein Block beginnt immer mit einer „Host“ Zeile, in der der Alias vergeben wird, danach folgenden (eingerückt) alle Optionen. Es gibt eine unwahrscheinliche Menge, relativ pratisch finde ich:
- HostName – Der Name des Servers (wenn er fehlt wird der Name hinter Host benutzt)
- Port – Alternativer Port (darum geht es ja gerade)
- LocalForward – Port-Weiterleitungen automatisch einrichten
- IdentifyFile – Alternativen SSH-Key benutzen (schön, wenn man mehr als einen hat)
- KeepAliveInterval – Damit die Verbindung nicht abbricht
Mit einer solchen Alias wird unser Kommando nun als zu
git clone ssh://server1:/pfad/repo.git
Das ganze funktioniert natürlich auch mit dem normalen SSH-Client, also per „ssh server1“ (dafür ist es ja eigentlich gedacht). Und noch ein Tipp: Wenn man als „Alias“ direkt den kompletten Servernamen benutzt (und dann die „HostName“-Zeile weglässt), kann man den Port so angeben, ohne das „git clone“ Kommando anpassen zu müssen. Also in etwa so:
Host server.example.org Port 1234
Praktisch, oder?
Weitere Informationen gibt es in diesem Blogeintrag oder bei Ubuntuusers.
Und bevor jetzt jemand fragt, warum sollte ich denn den SSH-Port ändern, wenn das alles so umständlich ist? Du solltest, auf meinem Server hat das die Anzahl der Loginversuche von ca. 1 Mio/Tag auf 0 reduziert. Beim normalen Port zu bleiben ist also (wenn der Server aus dem Internet erreichbar ist) leichtsinning. Ich benutze übrigens immer den gleichen alternativen Port für alle meine Server, dann vergisst man den auch nicht so schnell. Ja, das ist Security by Obscurity, aber es ist sehr wirksam (natürlich nur zusammen mit einem guten Passwort/SSH-Keys).