SSH Config Datei: bequemen Shortcut für remote Verbindungen erstellen

Manchmal machen SSH-Verbindungen einfach keinen Spaß! Man verbindet sich immer zum gleichen Server und muss jedesmal einen ellenlangen Shell-Befehl im Terminal eintippseln. Hier beschreibe ich, wie man einfach einen Shortcut erstellt.

Statt sich jedes Mal an alle Einstellungen erinnern zu müssen und dann so etwas wie ssh -luser0815 -p 2222 host4711.example.com eingeben zu müssen, reicht es plötzlich ssh myserver zu tippseln. Boom. Verbunden. Fertig.

Dazu erstellt man zunächst folgende Datei ~/.ssh/config und öffnet diese in einem Texteditor seiner Wahl. Folgendermaßen sieht eine Beispielkonfiguration aus, die sich glaube ich von selbst erklärt.

Host myserver
	HostName host4711.example.com
	Port 2222
	User user0815

	ServerAliveInterval 30
	ServerAliveCountMax 120

Host github.com
	IdentityFile ~/.ssh/mygithubkey_rsa

Host tunnel
	HostName database.example.com
	User dbuser
	IdentityFile ~/.ssh/rsa_id
	LocalForward 9906 127.0.0.1:3306
	# forwards local port 9906 to remote port 3306
	# activate tunnel with: ssh -f -N tunnel
	# -f puts ssh in background
	# -N makes it not execute a remote command

Das spart nicht nur viel Zeit und Tipperei, sondern auch Befehle wie rsync werden viel übersichtlicher zu konfigurieren. als remote server kann einfach der hier angegebene Host verwendet werden.

Alle Details zum SSH Config File finden sich auf der zugehörigen man page (Wenn der Link nicht funktioniert installiere das super praktische Bwana).

Meine Quelle ist ein Artikel auf nerderati.com. Dort finden sich noch mehr Details zur SSH config Datei.

rsync mit Standard-Parametern (defaults) für progress und exclude versehen

In manchen Umgebungen gäbe man rsync gern einge Parameter/Optionen als Standard vor. Sei es um die Aufrufe von rsync übersichtlicher zu gestalten oder einfach um ein paar dauernd wiederholte Eingaben auf der Tastatur zu sparen. Ich ergänze als default Vorgabe im einzelnen

  1. eine Reihe von selbst definierten exclude pattern, also Definitionen von Dateien, die nicht synchronisiert werden sollen via --exclude-from=FILE,
  2. den Ausschluss von SVN und CVS Dateien mit Hilfe des Parameters --cvs-exclude
  3. und die Anzeige eines Fortschrittsbalkens mit --progress.

zu 1.) Es gibt Dateien, die nerven einfach fast immer, die will man nicht synchronisieren. Um diese zentral zu pflegen und ohne die einzelnen Aufrufe unübersichtlich zu machen, habe ich die Datei ~/.rsync/exclude angelegt und dort Zeilenweise die exclude pattern eingetragen. Meine Datei sieht z. Zt. wie folgt aus.

*.DS_Store
*._*
*Thumbs.db
*.bak
*~
*.tmp
*.temp
.Trash/*

Zu Beachten ist hier, dass die exclude pattern immer relativ zu den zu synchronisierenden Pfaden angewendet werden. Doch dazu mehr auf der man page von rsync (Wenn der Link nicht funktioniert installiere das super praktische Bwana)!

zu 3.) Hier wird einem zwar nicht der Fortschritt des gesammten Kopiervorgangs verraten, aber immerhin ein Fortschrittsbalken für die aktuell von rsync übertragene Datei. Hier ist abzuwägen. Wenn man viele lokale Kopiervorgänge mit großer Zahl kleiner Dateien durchführt, kann dies die Synchronisierung deutlich verlangsamen. Wenn man jedoch wie ich hauptsächlich Dateien an entfernte Server überträgt, ist das schon praktisch. Ebenfalls ein Auschlusskriterium ist die Verwendung von rsync in einem Cron-Job mit aktivierter E-Mail-Funktion. Hier wäre zu testen, ob evtl. durch das Hinzufügen von --quiet die default-Werte überschrieben werden können.

Wie können die Parameter nun standardmäßig aufgerufen werden? Mit Hilfe eines Alias! Dazu einfach folgende Zeile in der Datei ~/.bash_profile (wenn sie nicht existiert: einfach neu anlegen) ergänzen:

alias rsync = 'rsync --cvs-exclude --exclude-from=$HOME/.rsync/exclude --progress'

Die Sache mit dem alias funktioniert so übrigens mit jedem anderem Parameter und generell jedem Shell-Befehl.