Secure Shell: Verschlüsselung im Netzwerk mit OpenSSH

Secure zsh verschlüsselung ubuntu überblick sudo sshfs sshd ssh tunnel ssh shell sftp Secure Shell scp putty proxy osbn openssh server openssh client openssh open source linux grundlagen firewall einführung broken pipe bash bahs arch linux arch admin Secure Shell (SSH) tauscht verschlüsselte Daten mit befreundeten Computern im lokalen oder weltweiten Netzwerk. SSH kann u.a. verschlüsselt Daten kopieren, Verzeichnisse einbinden, andere Protokolle tunneln, grafische Programme aufrufen und sogar als Proxy dienen. Als Standard hat sich das freie OpenSSH durchgesetzt.

OpenSSH kommuniziert mit einer Shell wie z.B. Bash oder Zsh. Damit können auf der lokalen Kommandozeile auf dem entfernten Computer Befehle ausgeführt werden.

Dieser Artikel erscheint im Rahmen der OSBN Linux-Werkzeugkasten-Reihe (bereits erschienene Artikel).

OpenSSH: Vorbereitungen

Zur Verbindung benötigen Client und Server das Client-Paket, das z.B. openssh (Arch Linux) heißen kann oder openssh-client (Debian Linux). Bei den meisten Distribution werden mit der Installation bereits die benötigten Schlüssel erzeugt.

Auf dem entfernten Computer (der auf eingehende Verbindungen lauscht) muss zusätzlich der Dienst sshd laufen. Die meisten Linux-Distributionen liefern sshd im Paket openssh bereits mit. Bei Ubuntu/Debian muss aber zusätzlich zu openssh-client das Paket openssh-server installiert werden (Ubuntu-Wiki: SSH-Server). Für Ubuntu/Debian wird der SSH-Dienst sshd am Server gestartet mit:

sudo /etc/init.d/sshd start

Mit u.a. Arch Linux z.B. als root (oder wie oben mit sudo, falls eingerichtet):

/etc/rc.d/sshd start

OpenSSH: Authentifizierung

Für die Verbindung des Clients zum Server-Dienst sshd gibt es grundsätzlich zwei Möglichkeiten. Die einfache Methode: Per Passwort. Um sich z.B. als Benutzer herby auf die Domain romete-server-14.org zu verbinden und eine Shell auf dem entfernten Computer zu starten (Standard Port 22):

ssh herby@romete-server-14.org

Der Server kann aber auch auf einem anderen Port auf Anfragen lauschen. In der Datei /etc/ssh/sshd_config könnte z.B. Port 1729 konfiguriert werden:

Port 1729

Der Client würde sich dann z.B. so verbinden:

ssh -p 1729 herby@romete-server-14.org

Die Sicherheit der SSH-Verbindung kann weiter erhöht werden, wenn das Login für root unmöglich gemacht wird.  Auf der Server-Seite wird dazu in der Datei /etc/ssh/sshd_config folgender Eintrag auf „no“ gesetzt:

PermitRootLogin no

Sicherer ist es, zunächst als regulärer Benutzer herby einzuloggen und erst dann Root-Rechte zu erwerben.

Sicherer als die Passwortmethode ist ein automatisches Login auf dem Server durch Hinterlegung eines vertrauenswürdigen SSH-Schlüssels des Clienten (vgl. SSH-Authentifizierung mit Schlüsselpaaren).

Der private Schlüssel des Clienten (oft: id_rsa) muss vor den Augen anderer immer versteckt bleiben und verbleibt gesichert auf dem Rechner des Clienten.

Jedoch hinterlegt der Client seinen öffentlichen Schlüssel auf der entfernten Maschine, meist zu finden im Home-Verzeichnis unter z.B. /home/myname/.ssh/id_rsa.pub. Der öffentliche Schlüssel kann im lokalen Netz z.b. mit Hilfe eines USB-Sticks hinterlegt werden.

Ist der Server im weltweiten Netz hingegen physisch weit entfernt, kann der öffentliche Schlüssel mit der Methode Passwort übermittelt werden. Sobald der Schlüssel hinterlegt ist und (!) das Login erfolgreich getestet wurde, kann die Passwort-Option dann entfernt werden.

Nach der Konfigurationsänderung an sshd wird empfohlen, eine zweite Shell neu zu starten und die Authentifizierung zu testen, während die erste Shell die Verbindung hält.

Ist der öffentliche Schlüssel des Clienten auf dem sshd-Server, kann er einfach an die Datei .ssh/authorized_keys angehängt werden. Beispiel:

cat /pfad/zu/id_rsa.pub >> /home/herby/.ssh/authorized_keys

Statt der Verbindung über die Kommandozeile ist es auch beliebt, mit Hilfe des grafischen Programms Putty SSH-Verbindungen zu initiieren und verwalten:

putty zsh verschlüsselung ubuntu überblick sudo sshfs sshd ssh tunnel ssh shell sftp Secure Shell scp putty proxy osbn openssh server openssh client openssh open source linux grundlagen firewall einführung broken pipe bash bahs arch linux arch admin

Putty (Client): Verbindung zu 192.168.1.102 auf Standardport 22

OpenSSH Konfiguration

Verschiedene Distributionen handhaben die Standardeinstellungen nicht immer gleich. Hier sind einige wichtige Konfigurationsdateien:

  • Client System: /etc/ssh/ssh_config (systemweite Einstellungen für alle Benutzer eines Computers)
  • Client Home: ~/.ssh/config (Einstellung auf Benutzerbasis)
  • Client Home: ~/.ssh/known_hosts (hier sind die öffentlichen Schlüssel entfernter Computer hinterlegt)
  • Server: /etc/ssh/sshd_config (systemweite Einstellungen für den Dienst sshd)

OpenSSH Verbindungsprobleme

Scheitert die Verbindung, sollte man sicherstellen, dass der Dienst sshd auf der entfernten Maschine auch wirklich läuft. Auch manche Änderungen an der Konfiguration erfordern einen Neustart (bzw. Reload) des Dienstes mit Root-Rechten. Beispiel Arch Linux:

 /etc/rc.d/sshd restart

Bei Verbindungsproblemen kann es auch an einer Firewall (Router…) liegen, die diesen Port blockiert.

Bei einer längeren Verbindungszeit kann es passieren, dass die SSH-Verbindung abbricht („broken pipe„). Dies kann passieren, wenn längere Zeit keine Daten übermittelt wurden. (Lösung hier: SSH-Problem “Broken Pipe)

Was SSH sonst noch kann

Neben dem reinen SSH gibt es noch eine ganze Reihe anderer Möglichkeiten, SSH als Basis von Verschlüsselung im Netzwerk zu nutzen. Eine Auswahl:

X: Mit der Option -X können grafische Programme auf dem Server gestartet werden. Nach dem Login wird hier z.B. Firefox in einem seperaten Fenster gestartet. Mit Performanceeinbußen muss gerechnet werden:

ssh -X username@remote-server firefox

SCP: Secure Copy kann analog zu cp Dateien verschlüsselt über das Netzwerk übertragen. Um eine Datei test.ogg in das Home-Verzeichnis von herby auf meine-domain.org zu kopieren (Doppelpunk nicht vergessen!):

scp test.ogg herby@meine-domain.org:

Mehr Info: Mit scp Dateien kopieren

SFTP: FTP/SSH

SSHFS: Mit Hilfe von sshfs kann man Verzeichnisse via OpenSSH lokal einbinden.

SSH-Tunnel: Viele Netzwerkverbindungen, die über unverschlüsselte Kanäle stattfinden, können über eine SSH-Verbindung „getunnelt“ werden. Hilfreich in unsicheren Netzwerkumgebungen und hinter über-restriktiv eingestellten Firewalls („Firewall umgehen“). Ausführliche Info zum Tunnelbau: SSH-Tunnel bauen und sicher surfen.

„Eingebauter“ Proxy: Wenn man sich mit SSH auf einen Computer verbinden kann, kann man ihn auch ohne weitere Software als Proxy verwenden. Zuerst wird ein Tunnel z.B. vom lokalen Port 12345 zum entfernten Rechner aufgebaut:

ssh -f -N -D 12345 herby@10.55.123.252

Dann werden im Browser die lokalen Netzwerkeinstellungen angepasst und als Proxy localhost und Port 12345 eingestellt.

Dieser Artikel verschafft nur einen groben Überblick über die Möglichkeiten der Secure Shell. Hier sind noch einige weiterführende Links zur verschlüsselten Netzwerkverbindung mit SSH:

SSH (Wikipedia)
6 nützliche Dinge, die man mit ssh tun kann
ssh-agent einsetzen
Fritzbox per SSH-Tunnel fernwarten
Fedora Wiki: Sicheren SSH-Server konfigurieren