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-keygen
ett 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.