SSH-Tuning
In diesem Artikel werde ich auf einige Möglichkeiten eingehen, den Umgang mit SSH bequemer zu gestalten.
Authentifizierung mit Public-Keys
Wenn man keine Lust hat, bei jeder Anmeldung das Passwort eingeben zu müssen, kann man die Anmeldung mittels Public-Key durchführen. Dazu muss man zuerst einen Public-Key erstellen (wenn man noch keinen hat). Dies ist unter Linux sehr einfach möglich mit dem Befehl:
ssh-keygen -t rsa
Alle Fragen kann man einfach mit Enter bestätigen. Anschließend muss der Public-Key noch auf den Server kopiert werden. Dazu gibt es unter Linux den Befehl:
ssh-copy-id user@server
Man muss dann noch ein letztes Mal das Passwort eingeben und danach läuft die Authentifizierung vollautomatisch ab.
ssh_config
In der ssh_config-Datei kann man sowohl die Standardeinstellungen für einige Webseiten (oder auch für alle) verändern, als auch einen Alias einrichten für Server die man häufig benutzt. Der Pfad zur Konfigurationsdatei ist ~/.ssh/config. Wenn die Datei noch nicht existiert, kann man sie einfach anlegen.
Wenn man z.B. für alle Sub-Domains von example.com die Komprimierung einschalten möchte, dann tun das folgende Zeilen:
Host *.example.com
Compression yes
Der zweite Verwendungszweck gestaltet sich genauso einfach:
Host foo
HostName example.com
User bar
Port 1234
Nun kann man die Verbindung mit ssh foo herstellen, anstatt jedesmal ssh bar@example.com -p1234 eintippen zu müssen.
SSH-Timeouts verhindern
Wenn man längere Zeit nichts in der SSH-Shell tippt, dann reagiert die Shell nicht mehr und bricht nach einiger Zeit mit der Fehlermeldung Write failed: Broken pipe ab. Um die zu verhindern, kann man folgendes in die ssh_config-Datei eintragen:
Host *
ServerAliveInterval 60
Nun wird alle 60 Sekunden eine Keep-Alive-Nachricht geschickt und es tritt kein Timeout mehr auf.
Ports tunneln
SSH macht es möglich einen Tunnel für bestimmte Ports aufzubauen. Dies ist z.B. nützlich, wenn man sich zu einem Rechner verbinden möchte, der in einem fremden LAN steht. Einen weiteren Einsatzzweck hab ich in einem anderen Blogpost beschrieben.
ssh -N -L2001:server-im-lan:80 user@gateway-server
Dies leitet den lokalen Port 2001 auf den Port 80 von server-im-lan um. Man kann nun durch Eingabe von http://localhost:2001/ im Browser vollkommen transparent auf den Server zugreifen, der in einem fremden LAN steht. Der gesamte Traffic wird dabei über den gateway-server getunnelt. Der Parameter -N sorgt dafür, dass keine Shell geöffnet wird. Wenn man mehrere Ports weiterleiten will, kann man den Parameter -L mit allem was dazu gehört auch mehrmals benutzen.
Wenn man eine Weiterleitung regelmäßig benötigt, lohnt es sich einen Alias in der ssh_config-Datei anzulegen. Bezogen auf obriges Beispiel würde es dann so aussehen:
Host tunnel
HostName gateway-server
User user
LocalForward localhost:2001 server-im-lan:80
Die Verbindung kann dann mit einem einfachen ssh tunnel aufgebaut werden.
Dateisystem über SSH mounten
SSH bietet die Möglichkeit mittels SFTP direkt auf das Dateisystem des Servers zuzugreifen. Dazu sind keine zusätzlichen Voraussetzungen auf der Server-Seite notwendig. Auf der Client-Seite muss das Programm sshfs installiert werden:
apt-get install sshfs
Nun kann man sehr einfach ein Verzeichnis auf dem Server lokal mounten:
sshfs user@server:/remote/pfad/ /lokaler/mountpoint/
Zum unmounten dient der Befehl:
fusermount -u /lokaler/mountpoint/
eingefrorene SSH-Shell beenden
Wenn eine SSH-Shell hängt und nicht mehr auf Eingaben reagiert, lässt sie sich mit einem Enter gefolgt von ~. beenden. Weitere Escape-Sequenzen zeigt ~? an.