In der Artikelserie Security-as-a-Service befassen wir uns mit diversen Ansätzen, um die Sicherheit Ihrer Cloudumgebung zu erhöhen. In diesem Artikel möchten wir Ihnen demonstrieren, wie die Sicherheit des SSH-Zugriffes auf virtuelle Linux Maschinen in Azure durch Verwendung eines SSH Keys erhöht werden kann.

Der Begriff “SSH Key” ist vielen geläufig, doch was verbirgt sich dahinter? Der sogenannte SSH-Schlüssel dient als Mittel zur Identifizierung an einem SSH-Server mit Public-Key-Verschlüsselungsverfahren und Challenge-Response-Authentifizierung. Diese Methode hat den Vorteil, dass kein Kennwort zur Anmeldung übertragen werden muss und damit auch nicht abgehört werden kann. Außerdem wird die Gefahr des Erratens von Passwörtern durch einen Angriff mit der sog. Brute-Force-Methode nahezu vollständig eliminiert.

Wie bei allen Public-Key-Verschlüsselungsverfahren besteht ein SSH Key aus einem privaten und einem öffentlichen Schlüssel. Der private Schlüssel verbleibt grundsätzlich auf dem Client, also auf Ihrem Gerät. Der öffentliche Schlüssel wird auf den Server übertragen und dient der Authentifizierung bei der Anmeldung. Die Erstellung des SSH Key Pairs (SSH-Schlüssel-Paares) und die Konfiguration des SSH-Clients und -Servers schrecken dabei viele ab.

Doch die Verwendung von SSH Keys ist kinderleicht und die Einführung benötigt keine 5 Minuten. Als Client können Windows oder Linux/MacOS verwendet werden, die Konfiguration der Linux Azure VMs ist komplett über das Portal möglich. Im Folgenden werden die drei notwendigen Schritte für Client und Server, sowie die Anpassungen beim Login beschrieben.

Schritt 1 – Erstellung des SSH Key Pairs (Client)

Die Erstellung eines SSH Key Pairs ist sowohl auf einem Linux/MacOS-, als auch auf einem Windows-Client problemlos möglich. Aus Sicherheitsgründen sollte betriebsystemunabhängig immer eine Passphrase vergeben werden, also ein Kennwort welches beim Zugriff auf den privaten Schlüssel abgefragt wird.

Linux-/MacOS-Client

Auf einem Linux-/MacOS-Client erfolgt die Erstellung über einen Einzeiler auf der Kommandozeile:

ssh-keygen -t rsa -b 4096

Nach Eingabe einer Passphrase werden ein privater (~/.ssh/id_rsa) und ein öffentlicher Schlüssel (~/.ssh/id_rsa.pub) erzeugt. Die zweite Datei wird im nächsten Schritt wieder benötigt.

Windows-Client

Auf einem Windows-Client empfehlen wir für SSH-Verbindungen das Open Source Programm Putty (Download Seite). Der MSI-Installer und die ZIP-Datei enthalten neben der ausführbaren Datei putty.exe auch das Programm puttygen.exe. Dieses wird gestartet und bietet eine graphische Oberfläche zur Erstellung des SSH Key Pairs:

Puttygen für SSH key Erstellung nach dem Start

Als Parameter werden im unteren Teil des Fensters RSA als “Type of key” und 4096 als “Number of bits” ausgewählt. Nach dem Klick auf “Generate” muss die Maus im oberen Teil des Fensters willkürlich bewegt werden, dies erhöht die Zufallsdaten für die Erstellung eines beliebigen Schlüssels.

Puttygen für SSH key Erstellung mit Daten

Nach Abschluss der Erstellung sollte unbedingt die “Key passphrase” eingetragen werden. Nun kann der private Schlüssel über die Schaltfläche “Save private key” und der öffentliche Schlüssel über “Save public key” gespeichert werden. Die zweite Datei wird im nächsten Schritt wieder benötigt.

Schritt 2 – Konfiguration der Azure Linux VM für SSH Keys über das Portal (Server)

Die Konfiguration des SSH-Servers erfolgt traditionell über die entsprechenden Konfigurationsdateien auf dem Server selbst. Linux VMs welche auf fertigen Images basieren bringen jedoch die VMAccess Extension bereits mit. Mit deren Hilfe lässt sich die Aktivierung von SSH Keys bequem über das Azure Portal erledigen. Dies funktioniert auch über die PowerShell, ist jedoch nicht Teil dieses Artikels.

Nach dem Login am Portal lässt sich entweder eine neue VM erstellen oder eine Bestehende anpassen.

Neue virtuelle Maschine

Für neue virtuelle Maschienen sind lediglich die folgenden Einstellungen zu treffen:

Azure Portal neue VM mit SSH Key

Es wird der Authentifizierungstyp “Öffentlicher SSH-Schlüssel” gewählt und im Feld “Öffentlicher SSH-Schlüssel” der komplette Inhalt der Textdatei mit dem öffentlichen Schlüssel aus Schritt 1 eingefügt.

Bestehende virtuelle Maschine

Für bestehende virtuelle Maschinen kann in den Eigenschaften unter “Support & Einstellungen” über die Option “Kennwort zurücksetzen” der Modus “Öffentlichen SSH-Schlüssel zurücksetzen” ausgewählt werden:

Azure Portal SSH Key über Kennwort zurücksetzen

Es wird der gewünschte “Benutzername” eingetragen und im Feld “Öffentlicher SSH-Schlüssel” der komplette Inhalt der Datei mit dem öffentlichen Schlüssel eingefügt.

Wer seinen Server komplett auf kennwortlose Anmeldungen umstellen möchte, sollte zuerst mit der beschriebenen Methode allen Benutzern einen öffentlichen SSH-Schlüssel zuweisen und dann die SSH-Server Konfigration anpassen:

sudoedit /etc/ssh/sshd_config
#PasswordAuthentication yes
PasswordAuthentication no

Im Anschluss wird noch der Dienst neugestartet. Für die gängigen Linux Distributionen funktioniert das wie folgt:

sudo systemctl restart sshd.service

Damit sind die Vorarbeiten abgeschlossen.

Schritt 3 – Der neue Login mit SSH Key (Client)

Linux-/MacOS-Client

Auf einem Linux-/MacOS-Client ist man damit bereits fertig. Der SSH-Client findet den privaten und den öffentlichen Schlüssel automatisch im Verzeichniss ~/.ssh, wenn bei Schritt 1 die Standard-Pfade nicht verändert wurden. Der SSH-Verbindungsaufbau erfolgt also wie gewohnt über die Kommandozeile, lediglich das abgefragte Kennwort ist die zuvor in Schritt 1 vergebene Passphrase:

ssh meinbenutzer@IP-ADRESSE/SERVERNAME

Windows-Client

Auf einem Windows-Client muss dem zum Verbindungsaufbau verwendeten Programm jedoch die Datei mit dem privaten Schlüssel mitgeteilt werden. Wir verwenden hier wieder Putty. Nach Start der putty.exe verbirgt sich die entsprechende Option unter “Connection” -> “SSH” -> “Auth”:

Putty Konfiguration mit SSH key Auswahl

Dort kann über die Schaltfläche “Browse” im Datei-Explorer das “Private key file for authentication”, also die Datei mit dem privaten SSH-Schlüssel von Schritt 1 ausgewählt werden.

Fazit

Die Erstellung eines SSH Key Pairs zur Authentifizierung ist einfach. Die Konfiguration des SSH-Servers über das Azure Portal kinderleicht und selbsterklärend. Sicherheitstechnisch ein absolutes Must-have! Wir hoffen mit diesem Artikel die Scheu davor etwas genommen zu haben.

Diese Methode erspart Ihnen zwar nicht die Arbeit, über generelle Sicherheits- und Design-Fragen nachzudenken, aber sie beschreibt einen Teilschritt den Sie in Ihr Sicherheitskonzept aufnehmen können. Wenn möglich ist es z.B. ebenso sinnvoll, den Port des SSH-Servers zusätzlich mit einer Network Security Group (NSG) abzusichern. Genaueres dazu haben wir in unserem Artikel Azure ARM VMs durch die Zugriffsbeschränkung absichern – Security-as-a-Service beschrieben. Der Artikel wurde für Windows VMs und den RDP-Port erstellt, kann aber ebenso auf Linux VMs und den SSH-Port angewendet werden.

Gerne können Sie uns bei weiteren Fragen zu Azure und virtuellen Linux Maschinen kontaktieren!