Daniel's Blog

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.

Quellen

Kommentar hinzufügen


( lesstile - umschließe Code-Blöcke mit ---)