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 Linux-VM's 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 de volgende sleuteltypen:
- SSH-protocol 2 (SSH-2) RSA (Klinknagel, Shamir, Adleman) met een minimale lengte van 2048 bits
- ED25519 sleutels met een vaste lengte van 256 bits
Andere belangrijke indelingen, zoals Elliptic-curve Diffie–Hellman (ECDH) en Elliptic Curve Digital Signature Algorithm (ECDSA) worden momenteel 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-keygen
een 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
Met de volgende ssh-keygen
opdracht worden standaard 256-bits ED25519 openbare en persoonlijke sleutelbestanden 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 ed25519
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/myrsaprivatekey \
-N mypassphrase
In het volgende voorbeeld ziet u aanvullende opdrachtopties voor het maken van een SSH-ED25519 sleutelpaar. Als er een SSH-sleutelpaar bestaat op de huidige locatie, worden deze bestanden overschreven.
ssh-keygen \
-m PEM \
-t ed25519 \
-C "azureuser@myserver" \
-f ~/.ssh/mykeys/myedprivatekey \
-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 (RSA)
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]-----+
Voorbeeld van ssh-keygen (ED25519)
ssh-keygen -t ed25519 -m PEM -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_ed25519.
Your public key has been saved in /home/azureuser/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:vFfHHrpSGQBd/oNdvNiX0sG9Vh+wROlZBktNZw9AUjA azureuser@myserver
The key's randomart image is:
+---[ED25519 256]----+
| |
|.. . |
|o+.o . |
|*=o o o + + |
|*+o+ oSB + o |
|**++o.+oo = . |
|=+*..*.o E |
|.. o o.. |
| .o. |
+----[SHA256]-----+
Opgeslagen sleutelbestanden
Enter file in which to save the key (/home/azureuser/.ssh/id_rsa): ~/.ssh/id_rsa
or
Enter file in which to save the key (/home/azureuser/.ssh/id_ed25519): ~/.ssh/id_ed25519
De standaardsleutelpaarnamen voor RSA en ED25519 zijn id_rsa
en id_ed25519
respectievelijk; sommige hulpprogramma's verwachten de bestandsnaam van de id_rsa
of id_ed25519
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.
RSA-sleutelpaar:
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
ED25519 sleutelpaar:
ls -al ~/.ssh
-rw------- 1 azureuser staff 1675 Aug 25 18:04 id_ed25519
-rw-r--r-- 1 azureuser staff 410 Aug 25 18:04 id_ed25519.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. Met deze opdracht wordt standaard het sleuteltype RSA gebruikt om ED25519 sleutels te genereren die u kunt doorgeven in een extra vlagopdracht --ssh-key-type
. 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.
Basisvoorbeeld
Maak een eenvoudige Ubuntu Linux-VM samen met Ed25519 SSH-sleutelpaar.
az vm create -n MyVm -g MyResourceGroup --image Ubuntu2204 --generate-ssh-keys --ssh-key-type ed25519
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:
RSA-sleutelpaar
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 opgemaakte sleutel maken van een bestaande openbare SSH-sleutel:
ssh-keygen \
-f ~/.ssh/id_rsa.pub \
-e \
-m RFC4716 > ~/.ssh/id_ssh2.pem
ED25519 sleutelpaar
cat ~/.ssh/id_ed25519.pub
De uitvoer is vergelijkbaar met het volgende (voorbeeld hieronder bewerkt):
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP6I5JuhGq3RidMNpxrplIQwEfc4Rh7UyV8JYYH2U2xA 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_ed25519.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 PEM-sleutel maken op basis van een bestaande openbare SSH-sleutel:
ssh-keygen \
-f ~/.ssh/id_ed25519.pub \
-e \
-m RFC4716 > ~/.ssh/id_edssh.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
or
ssh-add ~/.ssh/id_ed25519
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.