Ausführliche Schritte: Erstellen und Verwalten von SSH-Schlüsseln für die Authentifizierung bei einer Linux-VM in Azure

Gilt für: ✔️ Linux-VMs ✔️ Flexible Skalierungsgruppen

Mit einem SSH-Schlüsselpaar (Secure Shell) können Sie einen virtuellen Linus-Computer erstellen, bei dessen Authentifizierung SSH-Schlüssel verwendet werden. In diesem Artikel wird gezeigt, wie Sie eine Datei mit einem SSH-Schlüsselpaar (ein öffentlicher und ein privater RSA-Schlüssel) für SSH-Clientverbindungen erstellen und verwenden.

Schnellbefehle finden Sie unter Erstellen eines SSH-Schlüsselpaars (öffentlich und privat) für virtuelle Linux-Computer in Azure.

Informationen zum Erstellen von SSH-Schlüsseln und deren Verwendung zum Herstellen einer Verbindung mit einem Linux-Computer von einem Windows-Computer aus finden Sie unter Verwenden von SSH-Schlüsseln mit Windows in Azure. Sie können auch das Azure-Portal verwenden, um SSH-Schlüssel zum Erstellen virtueller Computer im Portal zu erstellen und zu verwalten.

Übersicht über SSH und Schlüssel

SSH ist ein Protokoll für verschlüsselte Verbindungen, das die sichere Anmeldung über ungesicherte Verbindungen ermöglicht. SSH ist das Standardverbindungsprotokoll für in Azure gehostete virtuelle Linux-Computer. SSH stellt bereits eine verschlüsselte Verbindung bereit. Bei Verwendung von Kennwörtern für SSH-Verbindungen ist die VM aber anfällig für Brute-Force-Angriffe. Es wird empfohlen, über SSH mithilfe eines Schlüsselpaars aus einem öffentlichen und einem privaten Schlüssel (auch SSH-Schlüssel genannt) eine Verbindung mit einer VM herzustellen.

  • Der öffentliche Schlüssel wird auf Ihrer Linux-VM platziert.

  • Der private Schlüssel bleibt auf dem lokalen System. Bewahren Sie diesen privaten Schlüssel sicher auf. Geben Sie ihn nicht weiter.

Wenn Sie einen SSH-Client verwenden, um eine Verbindung mit Ihrer Linux-VM (die den öffentlichen Schlüssel besitzt) herzustellen, testet die Remote-VM den Client, um sicherzustellen, dass er über den richtigen privaten Schlüssel verfügt. Wenn der Client über den privaten Schlüssel verfügt, erhält er Zugriff auf den virtuellen Computer.

Abhängig von den Sicherheitsrichtlinien in Ihrer Organisation können Sie ein einzelnes Paar aus einem öffentlichen und einem privaten Schlüssel für den Zugriff auf mehrere Azure-VMs und -Dienste verwenden. Sie benötigen nicht für jeden virtuellen Computer oder Dienst, auf den Sie zugreifen möchten, ein separates Schlüsselpaar.

Sie können Ihren öffentlichen Schlüssel beliebig weitergeben, aber auf Ihren privaten Schlüssel können nur Sie (bzw. Ihre lokale Sicherheitsinfrastruktur) zugreifen.

Unterstützte SSH-Schlüsselformate

Azure unterstützt zurzeit Paare aus öffentlichen/privaten Schlüsseln für SSH-Protokoll 2 (SSH-2) RSA, die eine Mindestlänge von 2048 Bits aufweisen. Andere Schlüsselformate wie z.B. ED25519 und ECDSA werden nicht unterstützt.

Verwendung und Vorteile von SSH-Schlüsseln

Wenn Sie eine Azure-VM erstellen, indem Sie den öffentlichen Schlüssel angeben, kopiert Azure den öffentlichen Schlüssel (im .pub-Format) auf dem virtuellen Computer in den ~/.ssh/authorized_keys-Ordner. SSH-Schlüssel in ~/.ssh/authorized_keys werden verwendet, um vom Client zu fordern, für eine SSH-Verbindung den entsprechenden privaten Schlüssel bereitzustellen. Bei einem virtuellen Azure-Computer unter Linux, bei dem SSH-Schlüssel für die Authentifizierung verwendet werden, konfiguriert Azure den SSHD-Server so, dass nur SSH-Schlüssel (und keine kennwortbasierten Anmeldungen) möglich sind. Wenn Sie virtuelle Azure Linux-Computer mit SSH-Schlüsseln erstellen, können Sie zur Sicherung der Bereitstellung des virtuellen Computers beitragen, und der üblicherweise nachträglich auszuführende Konfigurationsschritt zum Deaktivieren von Kennwörtern in der Datei sshd_config entfällt.

Falls Sie keine SSH-Schlüssel verwenden möchten, können Sie Ihren virtuellen Linux-Computer für die Kennwortauthentifizierung einrichten. Bei virtuellen Computern ohne Internetverbindung sind Kennwörter unter Umständen ausreichend. Allerdings müssen Sie weiterhin Ihre Kennwörter für die einzelnen virtuellen Linux-Computer verwalten und sich um angemessene Kennwortrichtlinien und -verfahren kümmern, indem Sie beispielsweise eine Mindestlänge für Kennwörter festlegen und sicherstellen, dass sie regelmäßig aktualisiert werden.

Generieren von Schlüsseln mit „ssh-keygen“

Ein bevorzugter Befehl zum Erstellen der Schlüssel ist ssh-keygen, der mit OpenSSH-Hilfsprogrammen in Azure Cloud Shell, einem macOS- oder Linux-Host und Windows 10 verfügbar ist. ssh-keygen stellt eine Reihe von Fragen, und anschließend werden ein privater Schlüssel und ein passender öffentlicher Schlüssel geschrieben.

SSH-Schlüssel werden standardmäßig im Verzeichnis ~/.ssh gespeichert. Wenn Sie nicht über das Verzeichnis ~/.ssh verfügen, können Sie es mithilfe des Befehls ssh-keygen gleich mit den richtigen Berechtigungen erstellen. Ein SSH-Schlüssel wird als Ressource erstellt und zur späteren Verwendung in Azure gespeichert.

Hinweis

Sie können auch Schlüssel mit der Azure CLI über den Befehl az sshkey create erstellen, wie unter Generieren und Speichern von SSH-Schlüsseln beschrieben.

Einfaches Beispiel

Der folgende ssh-keygen-Befehl generiert Dateien für öffentliche und private 4096-Bit-SSH-RSA-Schlüssel standardmäßig im Verzeichnis ~/.ssh. Wenn am aktuellen Speicherort bereits ein SSH-Schlüsselpaar vorhanden ist, werden diese Dateien überschrieben.

ssh-keygen -m PEM -t rsa -b 4096

Ausführliches Beispiel

Das folgende Beispiel zeigt zusätzliche Befehlsoptionen, um ein SSH-RSA-Schlüsselpaar zu erstellen. Wenn am aktuellen Speicherort bereits ein SSH-Schlüsselpaar vorhanden ist, werden diese Dateien überschrieben.

ssh-keygen \
    -m PEM \
    -t rsa \
    -b 4096 \
    -C "azureuser@myserver" \
    -f ~/.ssh/mykeys/myprivatekey \
    -N mypassphrase

Befehlsbeschreibung

ssh-keygen = zum Erstellen der Schlüssel verwendetes Programm

-m PEM = Formatieren des Schlüssels als PEM

-t rsa = Typ des zu erstellenden Schlüssels, in diesem Fall im RSA-Format

-b 4096 = die Anzahl der Bits im Schlüssel, in diesem Fall 4096

-C "azureuser@myserver" = ein Kommentar, der zur einfachen Identifizierung am Ende der Datei mit dem öffentlichen Schlüssel angefügt wird. Normalerweise wird eine E-Mail-Adresse als Kommentar verwendet, aber Sie können je nach Eignung für Ihre Infrastruktur auch etwas anderes angeben.

-f ~/.ssh/mykeys/myprivatekey = der Dateiname der Datei des privaten Schlüssels, wenn Sie nicht den Standardnamen verwenden. Eine entsprechende Datei des öffentlichen Schlüssels mit .pub wird im gleichen Verzeichnis generiert. Das Verzeichnis muss vorhanden sein.

-N mypassphrase = eine zusätzliche Passphrase, die verwendet wird, um auf die Datei mit dem privaten Schlüssel zuzugreifen.

Beispiel für ssh-keygen

ssh-keygen -t rsa -m PEM -b 4096 -C "azureuser@myserver"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/azureuser/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/azureuser/.ssh/id_rsa.
Your public key has been saved in /home/azureuser/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vFfHHrpSGQBd/oNdvNiX0sG9Vh+wROlZBktNZw9AUjA azureuser@myserver
The key's randomart image is:
+---[RSA 4096]----+
|        .oE=*B*+ |
|          o+o.*++|
|           .oo++*|
|       .    .B+.O|
|        S   o=BO.|
|         . .o++o |
|        . ... .  |
|         ..  .   |
|           ..    |
+----[SHA256]-----+

Gespeicherte Schlüsseldateien

Enter file in which to save the key (/home/azureuser/.ssh/id_rsa): ~/.ssh/id_rsa

Der Schlüsselpaarname für diesen Artikel. Standardmäßig wird ein Schlüsselpaar mit dem Namen id_rsa verwendet, und einige Tools erwarten den Namen id_rsa für die Datei mit dem privaten Schlüssel. Es ist also ratsam, dies zu berücksichtigen. Das Verzeichnis ~/.ssh/ ist der Standardspeicherort für SSH-Schlüsselpaare und die SSH-Konfigurationsdatei. Wenn kein vollständiger Pfad angegeben wird, erstellt ssh-keygen die Schlüssel im aktuellen Arbeitsverzeichnis anstatt im Standardverzeichnis ~/.ssh.

Liste des ~/.ssh-Verzeichnisses

ls -al ~/.ssh
-rw------- 1 azureuser staff  1675 Aug 25 18:04 id_rsa
-rw-r--r-- 1 azureuser staff   410 Aug 25 18:04 id_rsa.pub

Schlüsselpassphrase

Enter passphrase (empty for no passphrase):

Sie sollten unbedingt Ihrem privaten Schlüssel eine Passphrase hinzuzufügen. Wenn die Schlüsseldatei nicht mit einer Passphrase geschützt ist, kann sie von Personen, die über die Datei verfügen, zum Anmelden bei allen Servern mit dem entsprechenden öffentlichen Schlüssel verwendet werden. Das Hinzufügen einer Passphrase sorgt für mehr Schutz. Wenn sich eine Person Zugang zu Ihrer Datei mit dem privaten Schlüssel verschafft, haben Sie so mehr Zeit, die Schlüssel zu ändern.

Automatisches Generieren der Schlüssel während der Bereitstellung

Bei Verwendung der Azure CLI zum Erstellen Ihres virtuellen Computers können Sie optional den Befehl az vm create mit der --generate-ssh-keys-Option ausführen, um Dateien für öffentliche und private SSH-Schlüssel zu generieren. Die Schlüssel werden im Verzeichnis „~/.ssh“ gespeichert. Beachten Sie, dass diese Befehlsoption keine Schlüssel überschreibt, wenn sie bereits an diesem Speicherort vorhanden sind.

Bereitstellen des öffentlichen SSH-Schlüssels beim Bereitstellen eines virtuellen Computers

Um eine Linux-VM zu erstellen, die SSH-Schlüssel zur Authentifizierung verwendet, geben Sie Ihren öffentlichen SSH-Schlüssel beim Erstellen des virtuellen Computers mit Azure-Portal, CLI, Resource Manager-Vorlagen oder anderen Methoden ein. Wenn Sie das Portal verwenden, geben Sie den öffentlichen Schlüssel selbst ein. Bei Verwendung der Azure CLI zum Erstellen Ihres virtuellen Computers mit einem vorhandenen öffentlichen Schlüssel führen Sie den Befehl az vm create mit der --ssh-key-value-Option aus, um den Wert oder Speicherort dieses öffentlichen Schlüssels anzugeben.

Falls Sie nicht mit dem Format öffentlicher SSH-Schlüssel vertraut sein sollten, können Sie Ihren öffentlichen Schlüssel anzeigen, indem Sie cat wie unten angegeben ausführen. Ersetzen Sie hierbei ~/.ssh/id_rsa.pub durch den Speicherort Ihrer eigenen Datei mit dem öffentlichen Schlüssel:

cat ~/.ssh/id_rsa.pub

Die Ausgabe sieht in etwa wie folgt aus (redigierte Darstellung):

ssh-rsa XXXXXXXXXXc2EAAAADAXABAAABAXC5Am7+fGZ+5zXBGgXS6GUvmsXCLGc7tX7/rViXk3+eShZzaXnt75gUmT1I2f75zFn2hlAIDGKWf4g12KWcZxy81TniUOTjUsVlwPymXUXxESL/UfJKfbdstBhTOdy5EG9rYWA0K43SJmwPhH28BpoLfXXXXXG+/ilsXXXXXKgRLiJ2W19MzXHp8z3Lxw7r9wx3HaVlP4XiFv9U4hGcp8RMI1MP1nNesFlOBpG4pV2bJRBTXNXeY4l6F8WZ3C4kuf8XxOo08mXaTpvZ3T1841altmNTZCcPkXuMrBjYSJbA8npoXAXNwiivyoe3X2KMXXXXXdXXXXXXXXXXCXXXXX/ azureuser@myserver

Stellen Sie sicher, dass Sie weder zusätzliche Leerzeichen kopieren noch zusätzliche Zeilenumbrüche einfügen, wenn Sie den Inhalt der Datei mit dem öffentlichen Schlüssel im Azure-Portal oder in einer Resource Manager-Vorlage kopieren und einfügen. Bei Nutzung von macOS können Sie die Datei mit dem öffentlichen Schlüssel (standardmäßig ~/.ssh/id_rsa.pub) beispielsweise per Pipe mit pbcopy verknüpfen, um den Inhalt zu kopieren (für diesen Zweck gibt es auch andere Linux-Programme, z.B. xclip).

Wenn Sie lieber einen öffentlichen Schlüssel verwenden möchten, der in einem mehrzeiligen Format vorliegt, können Sie aus dem öffentlichen Schlüssel, den Sie zuvor erstellt haben, in einem PEM-Container einen formatierten RFC4716-Schlüssel generieren.

So erstellen Sie einen Schlüssel im RFC4716-Format aus einem vorhandenen öffentlichen SSH-Schlüssel:

ssh-keygen \
-f ~/.ssh/id_rsa.pub \
-e \
-m RFC4716 > ~/.ssh/id_ssh2.pem

Herstellen einer SSH-Verbindung mit Ihrem virtuellen Computer mit einem SSH-Client

Stellen Sie mit dem auf Ihrer Azure-VM bereitgestellten öffentlichen Schlüssel und dem privaten Schlüssel auf Ihrem lokalen System mithilfe der IP-Adresse oder dem DNS-Namen Ihres virtuellen Computers eine SSH-Verbindung mit Ihrem virtuellen Computer her. Ersetzen Sie azureuser und myvm.westus.cloudapp.azure.com im folgenden Befehl mit dem Benutzernamen des Administrators und dem vollständig qualifizierten Domänennamen (oder der IP-Adresse):

ssh azureuser@myvm.westus.cloudapp.azure.com

Falls Sie beim Erstellen des Schlüsselpaars eine Passphrase angegeben haben, müssen Sie die Passphrase eingeben, wenn Sie während des Anmeldeprozesses dazu aufgefordert werden. (Der Server wird dem Ordner ~/.ssh/known_hosts hinzugefügt, und Sie werden erst wieder zum Herstellen der Verbindung aufgefordert, wenn sich der öffentliche Schlüssel auf Ihrer Azure-VM ändert oder der Servername unter ~/.ssh/known_hosts entfernt wird.)

Wenn der virtuelle Computer die JIT-Zugriffsrichtlinie (Just-In-Time) verwendet, müssen Sie den Zugriff anfordern, bevor Sie eine Verbindung mit dem virtuellen Computer herstellen können. Weitere Informationen zur Just-In-Time-Richtlinie finden Sie unter Verwalten des Zugriffs auf virtuelle Computer mithilfe der Just-In-Time-Richtlinie.

Verwenden von „ssh-agent“ zum Speichern der Passphrase für den privaten Schlüssel

Sie können ssh-agent zum Zwischenspeichern der Passphrase für die private Schlüsseldatei verwenden, damit Sie die Passphrase nicht bei jeder SSH-Anmeldung eingeben müssen. Bei Verwendung eines Macintosh-Computers wird die Passphrase für private Schlüssel sicher im „Schlüsselbund“ von macOS gespeichert, wenn Sie ssh-agent aufrufen.

Überprüfen und verwenden Sie ssh-agent und ssh-add, um das SSH-System über die Schlüsseldateien zu informieren, damit Sie die Passphrase nicht interaktiv verwenden müssen.

eval "$(ssh-agent -s)"

Fügen Sie anschließend den privaten Schlüssel ssh-agent mit dem Befehl ssh-add hinzu.

ssh-add ~/.ssh/id_rsa

Die Passphrase für den privaten Schlüssel ist jetzt unter ssh-agent gespeichert.

Kopieren des Schlüssels auf einen vorhandenen virtuellen Computer mithilfe von „ssh-copy-id“

Wenn Sie bereits einen virtuellen Computer erstellt haben, können Sie einen neuen öffentlichen SSH-Schlüssel zu Ihrem virtuellen Linux-Computer mithilfe von ssh-copy-id hinzufügen.

ssh-copy-id -i ~/.ssh/id_rsa.pub azureuser@myserver

Erstellen und Konfigurieren einer SSH-Konfigurationsdatei

Sie können eine SSH-Konfigurationsdatei (~/.ssh/config) erstellen und konfigurieren, um Anmeldungen zu beschleunigen und das Verhalten Ihres SSH-Clients zu optimieren.

Das folgende Beispiel zeigt eine einfache Konfiguration, mit der Sie sich schnell mithilfe des standardmäßigen privaten SSH-Schlüssels bei einem bestimmten virtuellen Computer als Benutzer anmelden können.

Erstellen Sie die Datei.

touch ~/.ssh/config

Bearbeiten der Datei zum Hinzufügen der neuen SSH-Konfiguration

vim ~/.ssh/config

Fügen Sie die geeigneten Konfigurationseinstellungen für den VM-Host hinzu. In diesem Beispiel lautet der VM-Name myvm, und der Kontoname ist azureuser.

# Azure Keys
Host myvm
  Hostname 102.160.203.241
  User azureuser
# ./Azure Keys

Sie können Konfigurationen für zusätzliche Hosts hinzufügen, um ihnen jeweils die Verwendung ihres eigenen dedizierten Schlüsselpaars zu ermöglichen. Unter SSH CONFIG FILE (SSH-Konfigurationsdatei) finden Sie erweiterte Konfigurationsoptionen.

Da Sie jetzt über ein SSH-Schlüsselpaar und eine konfigurierte SSH-Konfigurationsdatei verfügen, können Sie sich schnell und sicher an Ihrer Linux-VM anmelden. Wenn Sie den folgenden Befehl ausführen, sucht SSH alle Einstellungen des Host myvm-Blocks in der SSH-Konfigurationsdatei und lädt sie.

ssh myvm

Beim ersten Anmelden bei einem Server mit einem SSH-Schlüssel werden Sie vom Befehl zur Eingabe der Passphrase für die Schlüsseldatei aufgefordert.

Nächste Schritte

Der nächste Schritt besteht darin, Azure-Linux-VMs mit dem neuen öffentlichen SSH-Schlüssel zu erstellen. Virtuelle Azure-Computer, die mit einem öffentlichen SSH-Schlüssel als Anmeldung erstellt werden, sind besser gesichert als VMs, die mit der Standardanmeldemethode und Kennwörtern erstellt werden.