Ubuntu Server 14.04 – Fernzugriff einrichten

Die Administration eines räumlich entfernten Servers, der z. B. in einem Serverraum oder bei einem Webhoster steht, erfolgt am effizientesten per Fernzugriff. Aus Sicherheitsgründen sollte man dabei nicht das ursprünglich hierfür vorgesehene Protokoll Telnet („Teletype Network“), sondern SSH („Secure Shell“) verwenden. SSH ermöglicht die Verschlüsselung der Kommunikation und eine Authentifizierung von Rechnern und Benutzern.

Unter Ubuntu ist das Programmpaket OpenSSH der Standard für SSH. Dessen Serverkomponente werden wir nachfolgend installieren und konfigurieren. Für höchstmögliche Sicherheit richten wir hierbei OpenSSH für ausschließliche Public Key-Authentifizierung ein.

Denjenigen, die mehr in die Tiefe gehen möchten, sei die Seite Specifications implemented by OpenSSH mit einer Zusammenstellung der umgesetzten Spezifikationen empfohlen. Die Erläuterung der einzelnen OpenSSH-Befehle mit den zugehörigen Parametern findet man auf der Seite Manual pages.

Voraussetzungen

Wir haben unseren Server z. B. gemäß der Anleitung zur Basisinstallation für Ubuntu Server 14.04 im lokalen Netzwerk 192.168.0.0/24 installiert und durch Updates / Upgrades auf den neuesten Stand gebracht. Der Server hat die IPv4-Adresse 192.168.0.1, den Rechnernamen server und gehört zur Domain test.local. Es existiert ein Benutzer theo, der Mitglied der Gruppe sudo ist und somit über Administratorrechte verfügt. Die Befehle führen wir mit Root-Rechten aus, z. B. nach Öffnen einer Rootshell mit sudo -i.

SSH-Server OpenSSH installieren

Die Installation des SSH-Servers OpenSSH auf unserem Server erfordert nur eine Anweisung:

root@server:~# apt install openssh-server

OpenSSH absichern

Mit den folgenden Änderungen / Ergänzungen in der Konfigurationsdatei /etc/ssh/sshd_config sichern wir OpenSSH zusätzlich ab:

...
#Port 22
Port 42022
...
#ListenAddress 0.0.0.0
ListenAddress 192.168.0.1
...
#PermitRootLogin without-password
PermitRootLogin no
...
AllowUsers theo

Die Änderung des Standard-Ports von 22 in 42022 bringt streng genommen keine zusätzliche Sicherheit („Security by Obscurity“), verringert aber die Anzahl der Login-Angriffe. Hier sollte ein Port stehen, der nicht für andere Dienste vorgesehen ist. Eine Liste mit Diensten und zugehörigen Standard-Ports ist z. B. in der Datei /etc/services hinterlegt.

Durch die zweite Änderung wird der Zugriff auf den Server auf das Netzwerkinterface / die IP-Adresse 192.168.0.1 eingeschränkt.

Mit der dritten Änderung verhindern wir das Einloggen als Benutzer root. Die Einwahl mit diesem Benutzerkonto ist nicht notwendig, da wir bei Bedarf mit sudo als root arbeiten können.

Mit dem zusätzlichen letzten Eintrag erlauben wir den Fernzugriff exklusiv nur dem Benutzer theo.

Wir belassen es zunächst bei einer Authentifizierung mit Benutzername und Passwort, da wir erst im folgenden Schritt auf das Authentifizierungsverfahren mit Public Key umstellen.

Damit die Änderungen wirksam werden, starten wir abschließend den OpenSSH-Dienst neu:

root@server:~# service ssh restart

SSH auf Public Key-Authentifizierung umstellen

Um die Einwahl über SSH weiter abzusichern, stellen wir das Authentifizierungsverfahren auf Public Key-Authentifizierung um. Zum Einloggen ist dann eine Datei mit einem privaten Schlüssel auf dem sich einwählenden Client-Rechner und eine Datei mit dem dazu passenden öffentlichen Schlüssel auf unserem Server erforderlich. Die entsprechenden Schlüssel können wir sowohl unter Linux als auch unter Windows erzeugen.

Den öffentlichen Schlüssel erwartet OpenSSH in der Datei authorized_keys im Unterordner .ssh des Heimat-Verzeichnisses. Diese Datei kann mehrere öffentliche Schlüssel für unterschiedliche Fernzugriffsnutzer enthalten.

Schlüssel unter Linux generieren

Auf einem Linux-Client erstellen wir mit Hilfe von ssh-keygen ein RSA(„Rivest, Shamir, Adleman“)-Schlüsselpaar mit einer Verschlüsselungstiefe von 4096 bit:

hans@client:~ ssh-keygen -b 4096 -t rsa

Wir übernehmen die Voreinstellung /home/hans/.ssh/id_rsa für den Dateinamen des privaten Schlüssels und sichern ihn nachfolgend mit einer Passphrase ab.

ssh-keygen erzeugt zusätzlich noch eine Datei /home/hans/.ssh/id_rsa.pub mit dem öffentlichen Schlüssel. Diese übertragen wir mit ssh-copy-id auf den Server:

hans@client:~ ssh-copy-id -p 42022 theo@server.test.local

Das Verzeichnis /home/theo/.ssh mit der Datei authorized_keys wird hierbei bei Bedarf neu angelegt.

Um die Korrektheit unserer Konfiguration zu überprüfen, wählen wir uns schließlich noch mit ssh ein:

hans@client:~ ssh -p 42022 theo@server.test.local

Nach Eingabe der Passphrase sollten wir Zugriff auf unseren Server haben.

Schlüssel unter Windows generieren

Als Vorbereitung erstellen wir – falls noch nicht vorhanden – auf dem Server im Heimat-Verzeichnis des Benutzers theo einen Ordner .ssh mit einer leeren Schlüsseldatei authorized_keys mit entsprechenden Zugriffsrechten:

root@server:~# mkdir /home/theo/.ssh
root@server:~# touch /home/theo/.ssh/authorized_keys
root@server:~# chown -R theo:theo /home/theo/.ssh
root@server:~# chmod 0700 /home/theo/.ssh
root@server:~# chmod 0600 /home/theo/.ssh/authorized_keys

Zur Generierung des Schlüsselpaares unter Windows eignet sich z. B. das Programm PuTTYgen. Nach dem Start von PuTTYgen erzeugen wir mit zufälligen Mausbewegungen SSH-2 RSA-Schlüssel (voreingestellt) mit einer Schlüssellänge von 4096 bit. Im darauffolgenden Fenster können wir den Kommentar rsa-key-„Datum“ in eine aussagekräftigere Beschreibung wie hans@client ändern. Zum Schutz unseres privaten Schlüssels vergeben wir noch eine Passphrase und speichern ihn z. B. in c:\users\hans\id_rsa.ppk ab. Da die von PuTTYgen erzeugte öffentlichen Schlüsseldatei nicht kompatibel zum OpenSSH-Format ist, kopieren wir den Text aus dem Feld unter Public key for pasting into OpenSSH authorized_keys file: in die Zwischenablage und fügen ihn in eine neue Datei, beispielsweise c:\users\hans\id_rsa.pub, ein.

Den öffentlichen Schlüssel können wir dann mit einem SCP(„Secure Copy“)-Client wie PSCP auf unseren Server übertragen. Befindet sich pscp.exe im Verzeichnis c:\users\hans, geben wir hierzu in der Windows-Eingabeaufforderung ein:

C:\Windows\System32>c:\users\hans\pscp -P 42022 c:\users\hans\id_rsa.pub theo@server.test.local:id_rsa.pub

Hierdurch wird die Schlüsseldatei im Heimat-Verzeichnis /home/theo/ auf dem Server gespeichert.

Abschließend fügen wir den Schlüssel noch an die Datei authorized_keys an und löschen ihn:

root@server:~# cat /home/theo/id_rsa.pub >> /home/theo/.ssh/authorized_keys
root@server:~# rm /home/theo/id_rsa.pub

Zum Test nutzen wir das Programm PuTTY, das wir ebenfalls in c:\users\hans installieren, in der Kommandozeilenversion:

C:\Windows\System32>c:\users\hans\putty -ssh -i c:\users\hans\id_rsa.ppk -P 42022 theo@server.test.local

Hierbei sollte bei korrekter Konfiguration nur noch die Abfrage der Passphrase erscheinen.

Ausschließliche Public Key-Authentifizierung aktivieren

Nach erfolgreichem Test schalten wir die Passwort-Authentifizierung in der Datei /etc/ssh/sshd_config ab:

...
#PasswordAuthentication yes
PasswordAuthentication no
...

Die Änderungen übernehmen wir mit einem Neustart des OpenSSH-Dienstes:

root@server:~# service ssh restart

Ab jetzt können sich nur noch Benutzer mit einem passenden Schlüssel einloggen.

2 Gedanken zu „Ubuntu Server 14.04 – Fernzugriff einrichten“

  1. Hallo Thomas,

    nach langer suche im Netz bin ich nun über deine Top Anleitungen gestolpert.
    Ich bin begeistert! Vielen Dank für die sehr guten Artikel. Fast schon vergeblich habe ich nach vernünftigen deutschsprachigen Anleitungen gesucht, aber hier bin ich ja nun fündig geworden und das beste: das du hier auch ein deutliches Augenmerk auf die Sicherheit legst. Weiter so!!
    Selbst ich als „LINUX- Noob“ komme mit den Sachen wunderbar klar.

    Meine Zielsetzung ist, auf einem Ubuntu-Server 16.04.2 LTS ein Forum mit phpBB 3 aufzusetzen….. Na, mal sehen. 😉
    Ich kann auf jeden Fall hier vieeeellll dafür gebrauchen.

    Gruß Sven

Schreibe einen Kommentar