Gedetailleerde stappen: SSH-sleutels maken en beheren voor verificatie bij een Virtuele Linux-machine in Azure

Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️

Met een SSH-sleutelpaar (Secure Shell) kunt u een virtuele Linux-machine maken die gebruikmaakt van SSH-sleutels voor verificatie. In dit artikel leest u hoe u een openbaar-persoonlijk SSH RSA-sleutelpaar maakt en gebruikt voor SSH-clientverbindingen.

Als u snelle opdrachten wilt in plaats van een uitgebreidere uitleg van SSH-sleutels, raadpleegt u Hoe u een openbaar-persoonlijk SSH-sleutelpaar maakt voor virtuele Linux-machines in Azure.

Als u SSH-sleutels wilt maken en deze wilt gebruiken om vanaf een Windows-computer verbinding te maken met een Virtuele Linux-machine, raadpleegt u SSH-sleutels gebruiken met Windows in Azure. U kunt ook Azure Portal gebruiken om SSH-sleutels te maken en beheren voor het maken van VM's in de portal.

Overzicht van SSH en sleutels

SSH is een versleuteld verbindingsprotocol dat beveiligde aanmeldingen biedt via onbeveiligde verbindingen. Hoewel SSH een versleutelde verbinding biedt, blijft het gebruik van wachtwoorden met SSH-verbindingen de VM kwetsbaar voor beveiligingsaanvallen. U wordt aangeraden verbinding te maken met een virtuele machine via SSH met behulp van een openbaar-persoonlijk sleutelpaar, ook wel SSH-sleutels genoemd.

  • De openbare sleutel wordt op uw VIRTUELE machine geplaatst.

  • De persoonlijke sleutel blijft op uw lokale systeem staan. Houd deze privésleutel geheim. Deel deze niet.

Wanneer u een SSH-client gebruikt om verbinding te maken met uw virtuele machine (met de openbare sleutel), test de externe VM de client om ervoor te zorgen dat deze de juiste persoonlijke sleutel heeft. Als de client de persoonlijke sleutel heeft, krijgt deze toegang tot de virtuele machine.

Afhankelijk van het beveiligingsbeleid van uw organisatie, kunt u één openbaar-persoonlijk sleutelpaar opnieuw gebruiken voor toegang tot meerdere Virtuele Azure-machines en -services. U hebt geen afzonderlijk paar sleutels nodig voor elke VIRTUELE machine of service die u wilt openen.

Uw openbare sleutel kan met iedereen worden gedeeld, maar alleen u (of uw lokale beveiligingsinfrastructuur) moet toegang hebben tot uw persoonlijke sleutel.

Ondersteunde SSH-sleutelindelingen

Azure ondersteunt momenteel SSH-protocol 2 (SSH-2) RSA-sleutelparen met een minimale lengte van 2048 bits. Andere sleutelindelingen, zoals ED25519 en ECDSA, worden niet ondersteund.

Gebruik en voordelen van SSH-sleutels

Wanneer u een Virtuele Azure-machine maakt door de openbare sleutel op te geven, kopieert Azure de openbare sleutel (in de .pub indeling) naar de ~/.ssh/authorized_keys map op de virtuele machine. SSH-sleutels zorgen ~/.ssh/authorized_keys ervoor dat het verbinden van clients de bijbehorende persoonlijke sleutel presenteert tijdens een SSH-verbinding. In een Virtuele Linux-machine van Azure die gebruikmaakt van SSH-sleutels voor verificatie, schakelt Azure het wachtwoordverificatiesysteem van de SSH-server uit en staat alleen SSH-sleutelverificatie toe. Door een Virtuele Linux-machine met SSH-sleutels van Azure te maken, kunt u helpen bij het beveiligen van de VM-implementatie en uzelf de typische configuratiestap na de implementatie van het uitschakelen van wachtwoorden in het sshd_config bestand.

Als u geen SSH-sleutels wilt gebruiken, kunt u uw Linux-VM instellen voor wachtwoordverificatie. Als uw VIRTUELE machine niet beschikbaar is voor internet, is het gebruik van wachtwoorden mogelijk voldoende. U moet echter nog steeds uw wachtwoorden voor elke Linux-VM beheren en een gezond wachtwoordbeleid en -procedures onderhouden, zoals minimale wachtwoordlengte en regelmatige systeemupdates.

Sleutels genereren met ssh-keygen

Als u de sleutels wilt maken, is ssh-keygeneen voorkeursopdracht, die beschikbaar is met OpenSSH-hulpprogramma's in de Azure Cloud Shell, een macOS- of Linux-host en Windows (10 & 11). ssh-keygen stelt een reeks vragen en schrijft vervolgens een persoonlijke sleutel en een overeenkomende openbare sleutel.

SSH-sleutels worden standaard opgeslagen in de ~/.ssh-directory. Als u niet beschikt over de map ~/.ssh, wordt deze door de opdracht ssh-keygen voor u gemaakt met de juiste machtigingen. Een SSH-sleutel wordt gemaakt als een resource en opgeslagen in Azure voor later gebruik.

Notitie

U kunt ook sleutels maken met de Azure CLI met de opdracht az sshkey create , zoals beschreven in Genereren en opslaan van SSH-sleutels.

Basisvoorbeeld

Met de volgende ssh-keygen opdracht worden standaard 4096-bits openbare en persoonlijke SSH RSA-bestanden in de ~/.ssh map gegenereerd. Als een bestaand SSH-sleutelpaar op de huidige locatie wordt gevonden, worden deze bestanden overschreven.

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

Gedetailleerd voorbeeld

In het volgende voorbeeld ziet u aanvullende opdrachtopties voor het maken van een SSH RSA-sleutelpaar. Als er een SSH-sleutelpaar bestaat op de huidige locatie, worden deze bestanden overschreven.

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

Uitleg van de opdracht

ssh-keygen = het programma dat wordt gebruikt voor het maken van de sleutels

-m PEM = de sleutel opmaken als PEM

-t rsa = type sleutel dat moet worden gemaakt, in dit geval in de RSA-indeling

-b 4096 = het aantal bits in de sleutel, in dit geval 4096

-C "azureuser@myserver" = een opmerking die wordt toegevoegd aan het einde van het openbare sleutelbestand om het gemakkelijk te identificeren. Normaal gesproken wordt een e-mailadres gebruikt als opmerking, maar gebruik wat het beste werkt voor uw infrastructuur.

-f ~/.ssh/mykeys/myprivatekey = de bestandsnaam van het persoonlijke-sleutelbestand, als u ervoor kiest om de standaardnaam niet te gebruiken. Er wordt een bijbehorend bestand met een openbare sleutel gegenereerd .pub in dezelfde map. De map moet bestaan.

-N mypassphrase = een extra wachtwoordzin die wordt gebruikt voor toegang tot het persoonlijke sleutelbestand.

Voorbeeld van 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]-----+

Opgeslagen sleutelbestanden

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

De naam van het sleutelpaar voor dit artikel. Het hebben van een sleutelpaar met de naam id_rsa is de standaardinstelling. Sommige hulpprogramma's verwachten mogelijk de bestandsnaam van de id_rsa persoonlijke sleutel, dus het is een goed idee om er een te hebben. De map ~/.ssh/ is de standaardlocatie voor SSH-sleutelparen en het SSH-configuratiebestand. Als ssh-keygen niet wordt opgegeven met een volledig pad, worden de sleutels in de huidige werkmap gemaakt in plaats van in de standaardmap ~/.ssh.

Lijst met de ~/.ssh map

Voer de volgende opdracht uit om bestaande bestanden in de ~/.ssh map weer te geven. Als er geen bestanden worden gevonden in de map of de map zelf ontbreekt, controleert u of alle vorige opdrachten zijn uitgevoerd. Mogelijk hebt u roottoegang nodig om bestanden in deze map te wijzigen op bepaalde Linux-distributies.

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

Wachtwoordzin voor sleutel

Enter passphrase (empty for no passphrase):

Het wordt sterk aanbevolen om een wachtwoordzin toe te voegen aan uw persoonlijke sleutel. Zonder een wachtwoordzin om het sleutelbestand te beveiligen, kan iedereen met het bestand dit gebruiken om u aan te melden bij een server met de bijbehorende openbare sleutel. Het toevoegen van een wachtwoordzin biedt meer beveiliging voor het geval iemand toegang kan krijgen tot uw persoonlijke sleutelbestand, zodat u tijd hebt om de sleutels te wijzigen.

Sleutels automatisch genereren tijdens de implementatie

Als u de Azure CLI gebruikt om uw virtuele machine te maken, kunt u eventueel openbare en persoonlijke SSH-sleutelbestanden genereren door de opdracht az vm create uit te voeren met de --generate-ssh-keys optie. De sleutels worden opgeslagen in de map ~/.ssh. Houd er rekening mee dat deze opdrachtoptie geen sleutels overschrijft als deze al aanwezig zijn op die locatie, zoals bij een aantal vooraf geconfigureerde installatiekopieën van de Compute Gallery.

Openbare SSH-sleutel opgeven bij het implementeren van een VIRTUELE machine

Als u een Virtuele Linux-machine wilt maken die gebruikmaakt van SSH-sleutels voor verificatie, geeft u uw openbare SSH-sleutel op bij het maken van de VM met behulp van Azure Portal, CLI, Resource Manager-sjablonen of andere methoden. Wanneer u de portal gebruikt, voert u de openbare sleutel zelf in. Als u de Azure CLI gebruikt om uw virtuele machine te maken met een bestaande openbare sleutel, geeft u de waarde of locatie van deze openbare sleutel op door de opdracht az vm create uit te voeren met de --ssh-key-value optie.

Als u niet bekend bent met de indeling van een openbare SSH-sleutel, kunt u de openbare sleutel als volgt zien door cat deze te vervangen ~/.ssh/id_rsa.pub door uw eigen openbare-sleutelbestandslocatie:

cat ~/.ssh/id_rsa.pub

De uitvoer is vergelijkbaar met het volgende (voorbeeld hieronder bewerkt):

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

Als u de inhoud van het openbare-sleutelbestand kopieert en plakt in Azure Portal of een Resource Manager-sjabloon, moet u geen extra witruimte kopiëren of extra regeleinden introduceren. Als u bijvoorbeeld macOS gebruikt, kunt u het openbare-sleutelbestand (standaard ~/.ssh/id_rsa.pub) doorsluisen naar pbcopy om de inhoud te kopiëren (er zijn andere Linux-programma's die hetzelfde doen, zoals xclip).

Als u liever een openbare sleutel gebruikt die een multiline-indeling heeft, kunt u een RFC4716 opgemaakte sleutel genereren in een PEM-container op basis van de openbare sleutel die u eerder hebt gemaakt.

Een RFC4716-sleutel maken van een bestaande openbare SSH-sleutel:

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

SSH naar uw VM met een SSH-client

Wanneer de openbare sleutel is geïmplementeerd op uw Azure-VM en de persoonlijke sleutel op uw lokale systeem, wordt SSH naar uw VM verzonden met behulp van het IP-adres of de DNS-naam van uw VIRTUELE machine. Vervang azureuser en myvm.westus.cloudapp.azure.com in de volgende opdracht door de gebruikersnaam van de beheerder en de volledig gekwalificeerde domeinnaam (of het IP-adres):

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

Als u een wachtwoordzin hebt opgegeven bij het maken van uw sleutelpaar, voert u de wachtwoordzin in wanneer u hierom wordt gevraagd tijdens het aanmeldingsproces. (De server is toegevoegd aan uw map ~/.ssh/known_hosts en u wordt pas weer gevraagd om verbinding te maken nadat de openbare sleutel op uw virtuele Azure-machine is gewijzigd of de naam van de server is verwijderd uit ~/.ssh/known_hosts.)

Als de VIRTUELE machine gebruikmaakt van het Just-In-Time-toegangsbeleid, moet u toegang aanvragen voordat u verbinding kunt maken met de virtuele machine. Zie Toegang tot virtuele machines beheren met behulp van het Just-In-Time-beleid voor meer informatie over het Just-In-Time-beleid.

SSH-agent gebruiken om uw wachtwoordzin voor persoonlijke sleutels op te slaan

Om te voorkomen dat u uw wachtwoordzin voor het persoonlijke sleutelbestand typt bij elke SSH-aanmelding, kunt u uw ssh-agent wachtwoordzin voor het persoonlijke sleutelbestand in de cache opslaan op uw lokale systeem. Als u een Mac gebruikt, slaat de macOS-sleutelhanger de wachtwoordzin van de persoonlijke sleutel veilig op wanneer u aanroept ssh-agent.

Controleer en gebruik ssh-agent en ssh-add om het SSH-systeem te informeren over de sleutelbestanden, zodat u de wachtwoordzin niet interactief hoeft te gebruiken.

eval "$(ssh-agent -s)"

Voeg nu de persoonlijke sleutel toe aan ssh-agent met de opdracht ssh-add.

ssh-add ~/.ssh/id_rsa

De wachtwoordzin voor de persoonlijke sleutel wordt nu opgeslagen in ssh-agent.

SSH-copy-id gebruiken om de sleutel naar een bestaande VM te kopiëren

Als u al een virtuele machine hebt gemaakt, kunt u een nieuwe openbare SSH-sleutel toevoegen aan uw Linux-VM met behulp van ssh-copy-id.

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

Een SSH-configuratiebestand maken en configureren

U kunt een SSH-configuratiebestand (~/.ssh/config) maken en configureren om aanmeldingen te versnellen en het gedrag van uw SSH-client te optimaliseren.

In het volgende voorbeeld ziet u een eenvoudige configuratie die u kunt gebruiken om u snel aan te melden als gebruiker bij een specifieke VIRTUELE machine met behulp van de standaard persoonlijke SSH-sleutel.

Maak het bestand.

touch ~/.ssh/config

Bewerk het bestand om de nieuwe SSH-configuratie toe te voegen

vim ~/.ssh/config

Voeg configuratie-instellingen toe die geschikt zijn voor uw host-VM. In dit voorbeeld is de VM-naam (Host) myvm, de accountnaam (Gebruiker) is azureuser en is het IP-adres of de FQDN (Hostnaam) 192.168.0.255.

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

U kunt configuraties voor extra hosts toevoegen om elk een eigen toegewezen sleutelpaar te kunnen gebruiken. Zie het SSH-configuratiebestand voor meer geavanceerde configuratieopties.

Nu u een SSH-sleutelpaar en een geconfigureerd SSH-configuratiebestand hebt, kunt u snel en veilig toegang krijgen tot uw Linux-VM. Wanneer u de volgende opdracht uitvoert, zoekt en laadt SSH instellingen uit het Host myvm blok in het SSH-configuratiebestand.

ssh myvm

De eerste keer dat u zich aanmeldt bij een server met behulp van een SSH-sleutel, wordt u gevraagd om de wachtwoordzin voor dat sleutelbestand.

Volgende stappen

De volgende stap bestaat uit het maken van virtuele Linux-machines in Azure met de nieuwe openbare SSH-sleutel. Virtuele Azure-machines die zijn gemaakt met een openbare SSH-sleutel omdat de aanmelding beter is beveiligd dan virtuele machines die zijn gemaakt met de standaardaanmeldingsmethode, wachtwoorden.