Dela via


Detaljerade steg: Skapa och hantera SSH-nycklar för autentisering till en virtuell Linux-dator i Azure

Gäller för: ✔️ Flexibla skalningsuppsättningar för virtuella Linux-datorer ✔️

Med ett SSH-nyckelpar (Secure Shell) kan du skapa en virtuell Linux-dator som använder SSH-nycklar för autentisering. Den här artikeln visar hur du skapar och använder ett offentlig-privat SSH RSA-nyckelfilpar för SSH-klientanslutningar.

Om du vill ha snabbkommandon i stället för en mer djupgående förklaring av SSH-nycklar kan du läsa Så här skapar du ett offentligt-privat SSH-nyckelpar för virtuella Linux-datorer i Azure.

Information om hur du skapar SSH-nycklar och använder dem för att ansluta till en virtuell Linux-dator från en Windows-dator finns i Använda SSH-nycklar med Windows i Azure. Du kan också använda Azure Portal för att skapa och hantera SSH-nycklar för att skapa virtuella datorer i portalen.

Översikt över SSH och nycklar

SSH är ett krypterat anslutningsprotokoll som ger säkra inloggningar över oskyddade anslutningar. Även om SSH tillhandahåller en krypterad anslutning gör användning av lösenord med SSH-anslutningar fortfarande den virtuella datorn sårbar för råstyrkeattacker. Vi rekommenderar att du ansluter till en virtuell dator via SSH med hjälp av ett offentligt-privat nyckelpar, även kallat SSH-nycklar.

  • Den offentliga nyckeln placeras på den virtuella datorn.

  • Den privata nyckeln finns kvar i ditt lokala system. Skydda den privata nyckeln. Dela den inte med andra.

När du använder en SSH-klient för att ansluta till den virtuella datorn (som har den offentliga nyckeln) testar den virtuella fjärrdatorn klienten för att se till att den har rätt privat nyckel. Om klienten har den privata nyckeln beviljas den åtkomst till den virtuella datorn.

Beroende på organisationens säkerhetsprinciper kan du återanvända ett enda offentligt-privat nyckelpar för att få åtkomst till flera virtuella Azure-datorer och -tjänster. Du behöver inte ett separat par nycklar för varje virtuell dator eller tjänst som du vill komma åt.

Din offentliga nyckel kan delas med vem som helst, men bara du (eller din lokala säkerhetsinfrastruktur) ska ha åtkomst till din privata nyckel.

SSH-nyckelformat som stöds

Azure stöder för närvarande följande nyckeltyper:

  • SSH-protokoll 2 (SSH-2) RSA (Rivest, Shamir, Adleman) med en minsta längd på 2 048 bitar
  • ED25519 nycklar med en fast längd på 256 bitar

Andra nyckelformat som Elliptic-curve Diffie-Hellman (ECDH) och Elliptic Curve Digital Signature Algorithm (ECDSA) stöds för närvarande inte.

Användning och fördelar med SSH-nycklar

När du skapar en virtuell Azure-dator genom att ange den offentliga nyckeln kopierar Azure den offentliga nyckeln (i .pub formatet) till ~/.ssh/authorized_keys mappen på den virtuella datorn. SSH-nycklar i ~/.ssh/authorized_keys ser till att anslutande klienter presenterar motsvarande privata nyckel under en SSH-anslutning. På en virtuell Azure Linux-dator som använder SSH-nycklar för autentisering inaktiverar Azure SSH-serverns system för lösenordsautentisering och tillåter endast SSH-nyckelautentisering. Genom att skapa en virtuell Azure Linux-dator med SSH-nycklar kan du skydda distributionen av den virtuella datorn och spara det vanliga konfigurationssteget sshd_config efter distributionen för att inaktivera lösenord i filen.

Om du inte vill använda SSH-nycklar kan du konfigurera den virtuella Linux-datorn så att den använder lösenordsautentisering. Om den virtuella datorn inte exponeras för Internet kan det räcka med lösenord. Du måste dock fortfarande hantera dina lösenord för varje virtuell Linux-dator och upprätthålla felfria lösenordsprinciper och metoder, till exempel minsta längd på lösenord och regelbundna systemuppdateringar.

Generera nycklar med ssh-keygen

För att skapa nycklarna är ssh-keygenett prioriterat kommando , som är tillgängligt med OpenSSH-verktyg i Azure Cloud Shell, en macOS- eller Linux-värd och Windows (10 & 11). ssh-keygen ställer en rad frågor och skriver sedan en privat nyckel och en matchande offentlig nyckel.

SSH-nycklarna sparas som standard i ~/.ssh-katalogen. Om du inte har någon ~/.ssh-katalog skapar ssh-keygen-kommandot en åt dig med rätt behörigheter. En SSH-nyckel skapas som en resurs och lagras i Azure för senare användning.

Kommentar

Du kan också skapa nycklar med Azure CLI med kommandot az sshkey create enligt beskrivningen i Generera och lagra SSH-nycklar.

Grundläggande exempel

Följande ssh-keygen kommando genererar 4096-bitars SSH RSA offentliga och privata nyckelfiler som standard i ~/.ssh katalogen. Om ett befintligt SSH-nyckelpar hittas på den aktuella platsen skrivs dessa filer över.

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

Följande ssh-keygen kommando genererar 256-bitars ED25519 offentliga och privata nyckelfiler som standard i ~/.ssh katalogen. Om ett befintligt SSH-nyckelpar hittas på den aktuella platsen skrivs dessa filer över.

ssh-keygen -m PEM -t ed25519

Detaljerat exempel

I följande exempel visas ytterligare kommandoalternativ för att skapa ett SSH RSA-nyckelpar. Om det finns ett SSH-nyckelpar på den aktuella platsen skrivs dessa filer över.

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

I följande exempel visas ytterligare kommandoalternativ för att skapa ett SSH-ED25519 nyckelpar. Om det finns ett SSH-nyckelpar på den aktuella platsen skrivs dessa filer över.

ssh-keygen \
    -m PEM \
    -t ed25519 \
    -C "azureuser@myserver" \
    -f ~/.ssh/mykeys/myedprivatekey \
    -N mypassphrase

Kommandot förklarat

ssh-keygen = det program som används för att skapa nycklarna

-m PEM = formatera nyckeln som PEM

-t rsa = typ av nyckel som ska skapas, i det här fallet i RSA-format

-b 4096 = antalet bitar i nyckeln, i det här fallet 4096

-C "azureuser@myserver" = en kommentar i slutet av filen för den offentliga nyckeln som gör det lätt att identifiera den. Normalt används en e-postadress som kommentar, men använd det som fungerar bäst för din infrastruktur.

-f ~/.ssh/mykeys/myprivatekey = filnamnet för den privata nyckelfilen om du väljer att inte använda standardnamnet. En motsvarande offentlig nyckelfil som läggs till med .pub genereras i samma katalog. Katalogen måste finnas.

-N mypassphrase = ytterligare en lösenfras som används för att komma åt filen med den privata nyckeln.

Exempel på 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]-----+

Exempel på 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]-----+

Sparade nyckelfiler

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

eller

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

Standardnamnen id_rsa för nyckelpar för RSA och ED25519 är id_rsa respektiveid_ed25519. Vissa verktyg kan förvänta sig filnamnet eller id_ed25519 den privata nyckeln, så att ha ett är en bra idé. Katalogen ~/.ssh/ är standardplatsen för SSH-nyckelpar och SSH-konfigurationsfilen. Om detta inte anges med en fullständig sökväg skapar ssh-keygen nycklarna i den aktuella arbetskatalogen, inte standarden ~/.ssh.

~/.ssh Lista över katalogen

Om du vill visa befintliga filer i ~/.ssh katalogen kör du följande kommando. Om inga filer hittas i katalogen eller om själva katalogen saknas kontrollerar du att alla tidigare kommandon har körts. Du kan kräva rotåtkomst för att ändra filer i den här katalogen på vissa Linux-distributioner.

RSA-nyckelpar:

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 nyckelpar:

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

Nyckellösenfras

Enter passphrase (empty for no passphrase):

Vi rekommenderar starkt att du lägger till en lösenfras i din privata nyckel. Utan en lösenfras för att skydda nyckelfilen kan alla med filen använda den för att logga in på alla servrar som har motsvarande offentliga nyckel. Att lägga till en lösenfras ger mer skydd om någon kan få åtkomst till din privata nyckelfil, vilket ger dig tid att ändra nycklarna.

Generera nycklar automatiskt under distributionen

Om du använder Azure CLI för att skapa den virtuella datorn kan du generera både offentliga och privata SSH-nyckelfiler genom att köra kommandot az vm create med alternativet --generate-ssh-keys . Det här kommandot skulle som standard vara nyckeltypen RSA för att generera ED25519 nycklar som du kan skicka i ytterligare flaggkommando --ssh-key-type . Nycklarna lagras i katalogen ~/.ssh. Observera att det här kommandoalternativet inte skriver över nycklar om de redan finns på den platsen, till exempel med vissa förkonfigurerade Compute Gallery-avbildningar.

Grundläggande exempel

Skapa en enkel virtuell Ubuntu Linux-dator tillsammans med SSH-nyckelparet Ed25519.

az vm create -n MyVm -g MyResourceGroup --image Ubuntu2204 --generate-ssh-keys --ssh-key-type ed25519

Ange offentlig SSH-nyckel när du distribuerar en virtuell dator

Om du vill skapa en virtuell Linux-dator som använder SSH-nycklar för autentisering anger du din offentliga SSH-nyckel när du skapar den virtuella datorn med hjälp av Azure Portal, CLI, Resource Manager-mallar eller andra metoder. När du använder portalen anger du själva den offentliga nyckeln. Om du använder Azure CLI för att skapa den virtuella datorn med en befintlig offentlig nyckel anger du värdet eller platsen för den offentliga nyckeln genom att köra kommandot az vm create med alternativet --ssh-key-value .

Om du inte är bekant med formatet för en offentlig SSH-nyckel kan du se din offentliga nyckel genom att köra cat på följande sätt och ersätta ~/.ssh/id_rsa.pub med din egen offentliga nyckelfilplats:

RSA-nyckelpar

cat ~/.ssh/id_rsa.pub

Utdata liknar följande (redigerat exempel nedan):

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

Om du kopierar och klistrar in innehållet i den offentliga nyckelfilen i Azure Portal eller en Resource Manager-mall ska du se till att du inte kopierar några ytterligare blanksteg eller introducerar ytterligare radbrytningar. Om du till exempel använder macOS kan du skicka den offentliga nyckelfilen (som standard ~/.ssh/id_rsa.pub) till pbcopy för att kopiera innehållet (det finns andra Linux-program som gör samma sak, till exempel xclip).

Om du föredrar att använda en offentlig nyckel som är i ett flerradsformat kan du generera en RFC4716 formaterad nyckel i en pem-container från den offentliga nyckel som du skapade tidigare.

Så här skapar du en RFC4716 formaterad nyckel från en befintlig offentlig SSH-nyckel:

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

ED25519 nyckelpar

cat ~/.ssh/id_ed25519.pub

Utdata liknar följande (redigerat exempel nedan):

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP6I5JuhGq3RidMNpxrplIQwEfc4Rh7UyV8JYYH2U2xA azureuser@myserver

Om du kopierar och klistrar in innehållet i den offentliga nyckelfilen i Azure Portal eller en Resource Manager-mall ska du se till att du inte kopierar några ytterligare blanksteg eller introducerar ytterligare radbrytningar. Om du till exempel använder macOS kan du skicka den offentliga nyckelfilen (som standard ~/.ssh/id_ed25519.pub) till pbcopy för att kopiera innehållet (det finns andra Linux-program som gör samma sak, till exempel xclip).

Om du föredrar att använda en offentlig nyckel som är i ett flerradsformat kan du generera en RFC4716 formaterad nyckel i en pem-container från den offentliga nyckel som du skapade tidigare.

Så här skapar du en PEM-formaterad nyckel från en befintlig offentlig SSH-nyckel:

ssh-keygen \
-f ~/.ssh/id_ed25519.pub \
-e \
-m RFC4716 > ~/.ssh/id_edssh.pem

SSH till den virtuella datorn med en SSH-klient

Med den offentliga nyckeln distribuerad på din virtuella Azure-dator och den privata nyckeln i ditt lokala system, SSH till den virtuella datorn med ip-adressen eller DNS-namnet på den virtuella datorn. Ersätt azureuser och myvm.westus.cloudapp.azure.com i följande kommando med administratörsanvändarnamnet och det fullständigt kvalificerade domännamnet (eller IP-adressen):

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

Om du angav en lösenfras när du skapade nyckelparet anger du lösenfrasen när du uppmanas att göra det under inloggningsprocessen. (Servern läggs till i din ~/.ssh/known_hosts-mapp, och du blir inte ombedd att ansluta igen förrän den offentliga nyckeln på din virtuella Azure-dator ändras eller när servernamnet tas bort från ~/.ssh/known_hosts.)

Om den virtuella datorn använder just-in-time-åtkomstprincipen måste du begära åtkomst innan du kan ansluta till den virtuella datorn. Mer information om just-in-time-principen finns i Hantera åtkomst till virtuella datorer med just-in-time-principen.

Använd ssh-agent för att lagra lösenfrasen för din privata nyckel

För att undvika att skriva lösenfrasen för din privata nyckelfil med varje SSH-inloggning kan du använda ssh-agent för att cachelagra lösenfrasen för din privata nyckelfil i det lokala systemet. Om du använder en Mac lagrar macOS-nyckelringen den privata nyckellösenfrasen på ett säkert sätt när du anropar ssh-agent.

Verifiera och använd ssh-agent och ssh-add informera SSH-systemet om nyckelfilerna så att du inte behöver använda lösenfrasen interaktivt.

eval "$(ssh-agent -s)"

Lägg nu till den privata nyckeln i ssh-agent med hjälp av kommandot ssh-add.

ssh-add ~/.ssh/id_rsa

eller

ssh-add ~/.ssh/id_ed25519

Lösenfrasen för den privata nyckeln lagras nu i ssh-agent.

Använd ssh-copy-id för att kopiera nyckeln till en befintlig virtuell dator

Om du redan har skapat en virtuell dator kan du lägga till en ny offentlig SSH-nyckel till din virtuella Linux-dator med .ssh-copy-id

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

Skapa och konfigurera en SSH-konfigurationsfil

Du kan skapa och konfigurera en SSH-konfigurationsfil (~/.ssh/config) för att påskynda inloggningar och optimera SSH-klientbeteendet.

I följande exempel visas en enkel konfiguration som du kan använda för att snabbt logga in som användare på en specifik virtuell dator med hjälp av den privata standardnyckeln för SSH.

Skapa filen.

touch ~/.ssh/config

Redigera filen för att lägga till den nya SSH-konfigurationen

vim ~/.ssh/config

Lägg till konfigurationsinställningar som är lämpliga för den virtuella värddatorn. I det här exemplet är det virtuella datornamnet (värd) myvm, kontonamnet (användaren) är azureuser och IP-adressen eller FQDN (värdnamnet) är 192.168.0.255.

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

Du kan lägga till konfigurationer för ytterligare värdar så att var och en kan använda sitt eget dedikerade nyckelpar. Mer avancerade konfigurationsalternativ finns i SSH-konfigurationsfilen .

Nu när du har ett SSH-nyckelpar och en konfigurerad SSH-konfigurationsfil kan du fjärransluta till din virtuella Linux-dator snabbt och säkert. När du kör följande kommando letar SSH upp och läser in alla inställningar från Host myvm blocket i SSH-konfigurationsfilen.

ssh myvm

Första gången du loggar in på en server med en SSH-nyckel uppmanas du att ange lösenfrasen för nyckelfilen.

Nästa steg

Nästa uppgift är att skapa virtuella Azure Linux-datorer med den nya offentliga SSH-nyckeln. Virtuella Azure-datorer som skapas med en offentlig SSH-nyckel som inloggning är bättre skyddade än virtuella datorer som skapats med standardmetoden för inloggning, lösenord.