Im vorherigen Teil dieser Serie haben Sie gesehen, wie mithilfe von Docker ein Anwendungssystem aus mehreren Teilen aufgesetzt werden kann, und zwar mit einem Node-basierten Frontend, einem Dienst auf .NET-Basis, sowie MongoDB und Nginx als Infrastruktur. Dieses GitHub-Repository  enthält das Beispielprojekt aus dem ersten Artikel.

Ein Virtual Server von Host Europe macht es Ihnen leicht, Ihr eigenes Docker-Anwendungssystem in Betrieb zu nehmen. Dies können Sie mit allen von Host Europe unterstützten Serverplattformen tun. In der folgenden Schritt-für-Schritt-Anleitung werden Sie lernen, wie es mit Ubuntu-Linux funktioniert. Die meisten Schritte sind ähnlich, wenn Sie eine andere Plattform verwenden. Bitte kontaktieren Sie uns gern, wenn Sie Hilfestellung mit der Umgebung Ihrer Wahl benötigen!

Installationsschritte

Der größte Teil des folgenden Texts geht davon aus, dass Ihr Host Europe-Server mit Ubuntu 22 installiert worden ist. Bei anderen Linux-Versionen, sogar bei anderen Ubuntu-Versionen, könnten kleine Details etwas anders aussehen oder ablaufen. Die Installation selbst ist automatisch, und es gibt dabei wenige Optionen. In den nächsten Absätzen finden Sie die notwendigen Schritte.

Zuerst starten Sie die Inbetriebnahme eines neu gebuchten Servers, indem Sie den Menüpunkt Server neu aufsetzen anklicken. Dann müssen Sie den Standort für den Server und das gewünschte System festlegen. Hier sehen Sie die Auswahl von Ubuntu 22.04 als Betriebssystem für den Server:

Abbildung - Docker installieren - Server neu aufsetzen

Leider sieht Host Europe derzeit nicht die automatische Installation eines Schlüssels, oder die Erzeugung eines neuen Schlüsselpaares, für den Betrieb von SSH vor. So müssen Sie im nächsten Schritt ein Passwort für den SSH-Zugang festlegen. Popups im Dialog helfen Ihnen dabei, ein starkes Passwort zu setzen, das den Sicherheitsrichtlinien von Host Europe genügt.

Abbildung - Docker installieren - Erstelle deine Admin-Anmeldeinformationen

Nachdem der Server fertig aufgesetzt wurde, finden Sie sich im Dashboard wieder. Dort ist die automatisch zugewiesene IP-Adresse des neuen Servers zu finden, die Sie ins Clipboard kopieren sollten.

Abbildung - Docker installieren - dockerserver

Nun können Sie sich mit dem Kommandozeilenwerkzeug ssh mit dem neuen Server verbinden. Am einfachsten verwenden Sie die Version von ssh, die bereits auf Ihrem Computer installiert ist, sofern Sie nicht ausgerechnet eine sehr alte Windows-Version verwenden. Linux und Mac bringen ssh als Kommandozeilenprogramm schon seit langem mit, in Windows gibt es das Programm ebenfalls seit Windows 10. Sollten Sie unter Windows das Standardprogramm nicht finden können, empfehle ich den Einsatz von Putty.

Verwenden Sie für die Verbindung Ihren eigenen Login-Namen sowie die IP-Adresse Ihres Servers:

Abbildung - Docker installieren - Mit dem neuen Server installieren

Große Auswahl an günstigen Domain-Endungen – schon ab 0,08 € /Monat
Jetzt Domain-Check starten

Weitere wichtige Schritte

Grundsätzlich entspricht die Umgebung auf dem neuen Server einer Neuinstallation von Ubuntu 22. Allerdings sollten Sie drei weitere Schritte machen, um sicher mit dem System arbeiten zu können:

  1. Shell des Users richtig einstellen
  2. Updates installieren
  3. Standarduser ubuntu entfernen
  4. SSH-Zugang für die Verwendung von Schlüsseln statt Passwörtern konfigurieren

Schritt 1: Bash anstelle von Dash

Nach dem ersten Login finden Sie sich an der Kommandozeile des Servers wieder, aber leider in einer Shell, die eigentlich nur für Skripte nützlich ist. Diese Shell heißt Dash und wird irrtümlich bei der Inbetriebnahme des Ubuntu-Servers von Host Europe eingerichtet. Das ist ungünstig, weil sie die interaktive Arbeit mit dem Server erschwert — es gibt dort noch nicht einmal eine Historie!

Um die Login-Shell für Ihren User-Account neu zu setzen, verwenden Sie folgendes Kommando:

Sie werden dann zur Eingabe Ihres Passworts aufgefordert, und danach wird die Shell geändert. Loggen Sie sich aus (mit dem Kommando exit oder der Tastenkombination Strg+D) und bauen Sie die Verbindung mit ssh wieder auf, und Sie finden sich in der Standardshell Bash wieder, die für Ihre Arbeit an der Kommandozeile wesentlich komfortabler ist.

Schritt 2: Updates installieren

Um sicherzustellen, dass Ihr Server mit der neuesten Software läuft, installieren Sie nun die letzten Updates. Dazu sind vier Befehle nötig:

Die Listen von verfügbaren Softwarepaketen werden aktualisiert. Am Ende der Ausgabe werden Sie mit großer Wahrscheinlichkeit Informationen zu Paketen sehen, die aktualisiert werden können.

Nun werden alle Änderungen durchgeführt, die sich aufgrund neuer Paketversionen anbieten. Je nach Umfang der verfügbaren Updates und Leistungsfähigkeit des virtuellen Servers kann dieser Schritt einen Moment dauern, aber im Allgemeinen sollte er nach ein paar Minuten abgeschlossen sein. Achten Sie darauf, dass Sie nicht die SSH-Verbindung unterbrechen, während der Vorgang läuft, da er sonst abgebrochen wird.

Mit diesem Kommando entfernen Sie Reste von alten Paketinstallationen. Das müssen Sie nicht unbedingt nach jedem Update tun, aber da Sie Ihren neuen Server gerade erst in Betrieb nehmen, kann es nicht schaden.

Schließlich kann es notwendig sein, den Server neu zu starten. Dies ist genau genommen nur nötig, wenn entweder der Linux-Kernel selbst oder gewisse grundlegende Systembibliotheken ersetzt worden sind. Falls Sie nicht sicher wissen, was die aktualisierten Pakete enthalten, ist ein Neustart an dieser Stelle empfehlenswert, um einen gesicherten Ausgangszustand zu erreichen.

Schritt 3: Entfernen des Standard-Accounts “ubuntu”

Die Systeminstallation enthält ein Benutzerkonto namens “ubuntu”, das Sie nicht brauchen. Es ist guter Rat, dieses Konto zu entfernen, damit Ihr System keine Bestandteile enthält, die gar nicht benötigt werden. Verwenden Sie folgendes Kommando:

Dieser einfache Schritt kann aus Sicherheitsgründen relevant sein.

Schritt 4: Schlüssel für SSH

Ebenso wie Schritt 3 dürfen Sie diesen Schritt als optional ansehen, aber ich empfehle die Verwendung von SSH allein mit Schlüsseln, da dies sicherer ist als die Verwendung von Passwörtern. Schlüssel werden beim Login niemals vom Client auf den Server übertragen, wie das mit Passwörtern geschieht, so dass ein Hacker grundsätzlich einen Schlüssel nicht abhören kann — natürlich ist auch das Abhören von Passwörtern in SSH unter normalen Umständen nicht möglich, aber der Schlüssel ist trotzdem technisch noch besser geschützt, da er den Client nie verlässt.

Übrigens sollte natürlich ein SSH-Schlüssel immer auf dem Client mit einem Passwort geschützt sein. Wenn Sie darauf verzichten, ist womöglich der praktische Umgang mit dem Schlüssel einfacher, weil er kein Passwort benötigt, aber sollte es einem Angreifer gelingen, die Datei mit dem Schlüssel von Ihrem PC zu kopieren, steht ihm der Zugang zum Server sofort offen. Mit einem Passwort geschützt stellt ein SSH-Schlüssel ein Zugangsverfahren mit zwei Faktoren dar, das als sehr sicher angesehen werden darf. Schließlich hat ein Schlüssel selbst gegenüber dem besten denkbaren Passwort den Vorteil, wesentlich “länger” zu sein.

Um ein neues Schlüsselpaar zu erzeugen, verwenden Sie das Kommando ssh-keygen auf Ihrem lokalen Computer. Natürlich wäre es auch möglich, das Schlüsselpaar auf dem Server zu erzeugen, aber dann wäre der neue private Schlüssel temporär auf dem Server und könnte dort abgegriffen werden — besser ist es, dass der private Schlüssel niemals auf den Server gelangt.

Der Durchlauf von ssh-keygen sieht etwa wie folgt aus. Bitte geben Sie auf jeden Fall eine Passphrase an! Absichtlich wird hier der Begriff Passphrase verwendet. Geben Sie ruhig einen kurzen Satz ein, den Sie sich leicht merken und ebenso leicht tippen können. Das ist in vieler Hinsicht einfacher als die Eingabe eines kürzeren, aber extrem kryptischen Passworts, und mindestens ebenso sicher.

Im Beispiel habe ich einen eigenen Namen für die erzeugten Dateien angegeben. id_rsa ist der Standardname, den ich nicht verwenden wollte, aber den Pfad habe ich belassen, da ich die Ablage von SSH-Schlüsseln unter <home>/.ssh gewöhnt bin. ssh-keygen erzeugt nun die beiden Dateien host-europe (das ist der private Schlüssel) und host-europe.pub, der öffentliche Schlüssel, pub für “public”. Der private Schlüssel ist durch die eingegebene Passphrase geschützt und sollte niemals aus Ihren Händen gegeben werden. Der öffentliche Schlüssel hingegen muss auf Zielsysteme kopiert werden, auf denen Sie sich mit dem Schlüssel einloggen möchten.

Zum Kopieren können Sie die bisher eingerichtete SSH-Verbindung mit dem Passwort verwenden. Das Kommando kann etwa so aussehen:

Ich habe hier einige mögliche Kombinationen verwendet. Der Pfad der Quelldatei ist absolut angegeben, aber natürlich sind auch relative Pfade denkbar (etwa .ssh/host-europe, wenn der aktuelle Pfad bereits mein Heimatverzeichnis unter /Users/oli ist). Andererseits habe ich auf dem Server einen relativen Pfad verwendet, der dem Doppelpunkt folgt. Alternativ könnte die Zielangabe mit gleichem Ergebnis auch so lauten: sturm@92.205.24.94:/home/sturm/.ssh/authorized_keys. In jedem Fall müssen Sie natürlich Ihren eigenen Benutzername und die IP Ihres Servers verwenden, wie zuvor.

Achtung: Das Kommando geht davon aus, dass Sie bisher keine Datei .ssh/authorized_keys auf dem Server haben. Sollte es diese bereits geben, würde sie überschrieben! Wenn Sie mehr als einen Schlüssel für den Zugang auf dem Server aktivieren möchten, müssen Sie die Schlüssel an die Datei .ssh/authorized_keys anhängen, ein Eintrag pro Zeile.

Um die SSH-Verbindung mit dem Schlüssel einmal auszuprobieren, ohne die Einstellung auf dem Server zunächst zu ändern, starten Sie nun die SSH-Verbindung mit Angabe der Option -i mit dem Namen des privaten Schlüssels:

Wie im Beispiel zu sehen ist, fordert SSH Sie nun explizit zur Eingabe der Passphrase für den Schlüssel auf, nicht mehr zur Eingabe des Benutzerpassworts auf dem Server. Danach wird die Verbindung wie zuvor aufgebaut.

Um den Konfigurationsschritt zu vervollständigen, sollten Sie nun die Konfiguration auf dem Server ändern, so dass ein Login nur noch mit dem Schlüssel möglich ist, und nicht mehr mit dem Passwort. Dazu bearbeiten Sie die Datei /etc/ssh/sshd_config mit einem Editor Ihrer Wahl — ich benutze gern vim, aber auch nano ist verfügbar — und suchen Sie nach dem Eintrag PasswordAuthentication. In meiner Testinstallation war dieser in Zeile 58 zu finden, und in der Standarddatei sollte die Zeile kommentiert sein und die Standardeinstellung widerspiegeln:

Entfernen Sie das Kommentarzeichen und ändern Sie yes in no:

Speichern Sie Ihre Änderungen und verlassen Sie den Editor. Nun starten Sie den SSH-Dienst neu:

Wenn Sie ganz sicher sein wollen, sich nicht versehentlich ausgesperrt zu haben, können Sie ein zweites Terminal verwenden, um eine Testverbindung zum Server aufzubauen. Verwenden Sie diesmal wieder das einfache Kommando, ohne Optionen:

Sie sollten eine Fehlermeldung erhalten, wie im Beispiel. Dies bedeutet, dass SSH nun nicht mehr die Verwendung eines Passwortes in Betracht zieht. Der SSH-Schlüssel wird an diesem Punkt nicht automatisch erkannt, daher kann die Verbindung so gar nicht aufgebaut werden. Um dieses letzte Problem zu beheben und gleichzeitig den Umgang mit SSH noch einfacher zu gestalten, können Sie nun lokal den SSH-Agent verwenden. Natürlich ist es auch möglich, bei jedem Kommando, wie bereits beim vorherigen Test, den Namen der korrekten Schlüsseldatei anzugeben.

Der SSH-Agent ist eine Standardkomponente der OpenSSH-Installation. Auf Geräten mit Linux oder MacOS sollte der Agent bereits laufen, unter Windows ist es notwendig, ihn zu starten. Es handelt sich unter Windows um einen Systemdienst mit dem Namen OpenSSH Authentication Agent, der auf “automatischen” Start umgestellt und dann gestartet werden muss.

Abbildung - Docker installieren - SSH-Agent - Standardkomponente der OpenSSH-Installation

Wenn der Agent läuft, können Sie herausfinden, ob er bereits Schlüssel kennt:

Nun fügen Sie Ihren neuen Schlüssel zum Agent hinzu:

Wenn Sie nun noch einmal eine SSH-Verbindung zum Server herstellen, wird der Schlüssel automatisch im SSH-Agent gefunden und die Verbindung aufgebaut, ohne dass die Passphrase für den Schlüssel abgefragt werden muss. So ist der Umgang mit SSH extrem komfortabel, während Sie gleichzeitig von der erhöhten Sicherheit profitieren, die die Verwendung eines Schlüssels bietet.

Docker installieren

Die Standardrepositories für Ubuntu enthalten bereits alle notwendigen Werkzeuge, um mit Docker zu arbeiten. Sie können diese mit einem einfachen Kommando installieren:

Das Paket docker.io ist die Basisinstallation von Docker selbst. In der aktuell von Ubuntu angebotenen Version von Docker ist docker-compose noch als separates Paket notwendig, in Zukunft wird es als docker compose mit Leerzeichen anstelle von docker-compose mit Bindestrich zum Standardbestandteil von Docker, was in manchen Linux-Distributionen bereits geschehen ist. Schließlich installiert das Kommando noch das Paket make, da es von dem Beispielprojekt aus dem vorherigen Artikel verwendet wird, um den Build-Vorgang zu automatisieren.

Nachdem die Installation abgeschlossen ist, sollte der notwendige Dienst automatisch gestartet werden. Dies können Sie natürlich prüfen:

Es werden keinen laufenden Container angezeigt, aber es tritt bei der Verbindung des Kommandozeilenwerkzeugs mit dem Docker-Daemon auch kein Fehler auf — soweit, so gut!

Im nächsten Teil dieser Serie werden Sie erfahren, wie Sie Ihr eigenes Docker-basiertes Applikationsprojekt auf dem neuen virtuellen Server in Betrieb nehmen können.

 

Titelmotiv: Photo by Rubaitul Azad on Unsplash

Oliver Sturm

Große Auswahl an günstigen Domain-Endungen – schon ab 0,08 € /Monat
Jetzt Domain-Check starten