Felsöka SSH-anslutningar till en virtuell Linux-dator som misslyckas, returnerar fel eller avvisas
Gäller för: ✔️ Virtuella Linux-datorer
Den här artikeln hjälper dig att hitta och korrigera de problem som uppstår på grund av SSH-fel (Secure Shell), SSH-anslutningsfel eller SSH nekas när du försöker ansluta till en virtuell Linux-dator (VM). Du kan använda Azure-portalen, Azure CLI eller VM Access Extension för Linux för att felsöka och lösa anslutningsproblem.
Kommentar
Var den här artikeln till hjälp? Dina indata är viktiga för oss. Använd feedbackknappen på den här sidan för att informera oss om hur bra den här artikeln fungerade för dig eller hur vi kan förbättra den.
Snabb felsökningssteg
Efter varje felsökningssteg kan du prova att återansluta till den virtuella datorn.
- Återställ SSH-konfigurationen.
- Återställ autentiseringsuppgifterna för användaren.
- Kontrollera att reglerna för nätverkssäkerhetsgruppen tillåter SSH-trafik och rolltilldelning.
- Kontrollera att det finns en regel för nätverkssäkerhetsgrupp för att tillåta SSH-trafik (som standard TCP-port 22).
- Du kan inte använda portomdirigering/mappning utan att använda en Azure-lastbalanserare.
- Om du använder Microsoft Entra-ID för att hantera SSH-inloggningar måste användaren tilldelas rollen Virtual Machine Administrator Login eller Virtual Machine User Login i resursgruppen som innehåller den virtuella datorn och dess associerade resurser. Annars tas felet "Behörighet nekad (publickey)" emot. Mer information finns i Konfigurera rolltilldelningar för den virtuella dator som använder Microsoft Entra-inloggning.
- Kontrollera den virtuella datorns resurshälsa.
- Se till att den virtuella datorn rapporterar att den är felfri.
- Om du har aktiverat startdiagnostik kontrollerar du att den virtuella datorn inte rapporterar startfel i loggarna.
- Starta om den virtuella datorn.
- Distribuera om den virtuella datorn.
Fortsätt läsa för mer detaljerade felsökningssteg och förklaringar.
Tillgängliga metoder för att felsöka SSH-anslutningsproblem
Du kan återställa autentiseringsuppgifter, SSH-konfiguration eller felsöka status för SSH-tjänsten med någon av följande metoder:
- Azure-portalen – bra om du snabbt behöver återställa SSH-konfigurationen eller SSH-nyckeln och inte har Azure-verktygen installerade.
- Seriekonsol för virtuella Azure-datorer – seriekonsolen för virtuella datorer fungerar oavsett SSH-konfigurationen och ger dig en interaktiv konsol till den virtuella datorn. I själva verket är "can't SSH"-situationer specifikt vad seriekonsolen har utformats för att hjälpa till att lösa. Du hittar mer information nedan.
- Använd Kör kommando via Azure-portalen – Du kan köra grundläggande kommandon med hjälp av funktionen Kör kommando via Azure-portalen. Utdata returneras till portalen.
- Azure CLI – om du redan är på kommandoraden återställer du snabbt SSH-konfigurationen eller autentiseringsuppgifterna.
- Azure VMAccessForLinux-tillägget – skapa och återanvända json-definitionsfiler för att återställa SSH-konfigurationen eller användarautentiseringsuppgifterna.
Efter varje felsökningssteg kan du försöka ansluta till den virtuella datorn igen. Om du fortfarande inte kan ansluta kan du prova nästa steg.
Använda Azure Portal
Azure-portalen ger ett snabbt sätt att återställa SSH-konfigurationen eller användarautentiseringsuppgifterna utan att installera några verktyg på den lokala datorn.
Börja genom att välja den virtuella datorn i Azure-portalen. Rulla ned till hjälpavsnittet och välj Återställ lösenord som i följande exempel:
Återställa SSH-konfigurationen
Om du vill återställa SSH-konfigurationen väljer du Reset configuration only
i avsnittet Läge som i föregående skärmbild och väljer sedan Uppdatera. När den här åtgärden har slutförts kan du försöka komma åt den virtuella datorn igen.
Återställa SSH-autentiseringsuppgifter för en användare
Om du vill återställa autentiseringsuppgifterna för en befintlig användare väljer du antingen Reset SSH public key
eller Reset password
i avsnittet Läge som i föregående skärmbild. Ange användarnamnet och en SSH-nyckel eller ett nytt lösenord och välj sedan Uppdatera.
Du kan också skapa en användare med sudo-behörigheter på den virtuella datorn från den här menyn. Ange ett nytt användarnamn och tillhörande lösenord eller SSH-nyckel och välj sedan Uppdatera.
Kontrollera säkerhetsregler
Använd KONTROLLERA IP-flöde för att bekräfta om en regel i en nätverkssäkerhetsgrupp blockerar trafik till eller från en virtuell dator. Du kan också granska gällande regler för säkerhetsgrupper för att säkerställa att inkommande NSG-regel "Tillåt" finns och prioriteras för SSH-port (standard 22). Mer information finns i Använda effektiva säkerhetsregler för att felsöka trafikflödet för virtuella datorer.
Kontrollera routning
Använd Funktionen Nästa hopp i Network Watcher för att bekräfta att en väg inte hindrar trafik från att dirigeras till eller från en virtuell dator. Du kan också granska effektiva vägar för att se alla effektiva vägar för ett nätverksgränssnitt. Mer information finns i Använda effektiva vägar för att felsöka trafikflödet för virtuella datorer.
Använda seriekonsolen för virtuella Azure-datorer
Seriekonsolen för virtuella Azure-datorer ger åtkomst till en textbaserad konsol för virtuella Linux-datorer. Du kan använda konsolen för att felsöka din SSH-anslutning i ett interaktivt gränssnitt. Kontrollera att du har uppfyllt kraven för att använda seriekonsolen och prova kommandona nedan för att ytterligare felsöka SSH-anslutningen.
Kontrollera att SSH-tjänsten körs
Om du vill kontrollera tjänststatusen använder du följande kommando, som är tillgängligt i de flesta aktuella Linux-distributioner:
sudo systemctl status sshd.service
Se följande utdataexempel. Kontrollera tjänststatusen Active
från raden i utdata. Utdata visar också porten och IP-adresserna som lyssnar på.
user@hostname:~$ sudo systemctl status sshd.service
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-06-23 17:44:36 UTC; 1 day 3h ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 829 (sshd)
Tasks: 1 (limit: 9535)
Memory: 5.1M
CGroup: /system.slice/ssh.service
└─829 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
Jun 23 17:44:35 ubu2004 systemd[1]: Starting OpenBSD Secure Shell server...
Jun 23 17:44:36 ubu2004 sshd[829]: Server listening on 0.0.0.0 port 22.
Jun 23 17:44:36 ubu2004 sshd[829]: Server listening on :: port 22.
Jun 23 17:44:36 ubu2004 systemd[1]: Started OpenBSD Secure Shell server.
Om det här kommandot inte är tillgängligt eller returnerar oväntade resultat använder du andra tillgängliga kommandon. Du kan använda ss
kommandot antingen som rot eller via sudo
kommandot för att kontrollera om SSH-tjänsten körs på den virtuella datorn.
I följande exempel visas hur du kör ss
kommandot via sudo
:
sudo ss --listen --tcp --process --numeric | grep sshd
Kommentar
Vi rekommenderar ss
kommandot eftersom netstat
kommandot är inaktuellt och inte alltid tillgängligt i moderna distributioner.
Om det finns några utdata är SSH igång. Se följande utdataexempel:
$ sudo ss -ltpn | grep sshd
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=829,fd=3))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=829,fd=4))
-ltpn
är argumentens --listen --tcp --process –numeric
förkortade form. Utdata visar att SSHD-processen 829 lyssnar på både IPv4- och IPv6-adresser.
Kontrollera vilken port SSH körs på
Kommandoutdata ovan visar att SSHD-processen lyssnar på port 22. När SSHD-processen har konfigurerats för att köras på en annan port visas porten i utdata. Kontrollera om ändringen gjordes i standardkonfigurationsfilen genom att granska standardkonfigurationsfilen /etc/ssh/sshd_config med något av följande kommandon:
grep -i port /etc/ssh/sshd_config
eller
grep -i listen /etc/ssh/sshd_config
Utdata ser ut så här:
Port 22
Alla rader som börjar med #
i utdata är en kommentar och kan ignoreras på ett säkert sätt. Om inget returneras, eller om raderna är kommentarer, används standardkonfigurationen. Standardkonfigurationen är att lyssna på alla IP-adresser i systemet, på port 22.
Använda Kör kommando via Azure-portalen
Om du inte kan köra kommandon via seriekonsolen, till exempel när endast SSH-nycklar används för autentisering, kan funktionen Kör kommando användas för att utfärda kommandon och visa utdata. Alla kommandon som tidigare kördes från seriekonsolen kan köras icke-interaktivt i avsnittet Kör kommando i Azure-portalen. Utdata returneras till Azure-portalen. Du behöver inte använda sudo
för att köra kommandon i körningskommandokontexten.
Använda Azure CLI
Om du inte redan har gjort det installerar du den senaste Azure CLI och loggar in på ett Azure-konto med az login.
Om du har skapat och laddat upp en anpassad Linux-diskbild kontrollerar du att Microsoft Azure Linux Agent version 2.0.5 eller senare är installerad. För virtuella datorer som skapats med galleriavbildningar är det här åtkomsttillägget redan installerat och konfigurerat åt dig.
Återställa SSH-konfiguration
Du kan först försöka återställa SSH-konfigurationen till standardvärden och starta om SSH-servern på den virtuella datorn. Detta ändrar inte användarnamnet, lösenordet eller SSH-nycklarna.
I följande exempel används az vm user reset-ssh för att återställa SSH-konfigurationen på den virtuella datorn med namnet myVM
i myResourceGroup
. Använd dina egna värden på följande sätt:
az vm user reset-ssh --resource-group myResourceGroup --name myVM
Återställa SSH-autentiseringsuppgifter för en användare
I följande exempel används az vm user update för att återställa autentiseringsuppgifterna för myUsername
till det värde som anges i myPassword
, på den virtuella datorn med namnet myVM
i myResourceGroup
. Använd dina egna värden på följande sätt:
az vm user update --resource-group myResourceGroup --name myVM \
--username myUsername --password myPassword
Om du använder SSH-nyckelautentisering kan du återställa SSH-nyckeln för en viss användare. I följande exempel används az vm access set-linux-user för att uppdatera SSH-nyckeln som lagras i ~/.ssh/id_rsa.pub
för användaren med namnet myUsername
, på den virtuella datorn med namnet myVM
i myResourceGroup
. Använd dina egna värden på följande sätt:
az vm user update --resource-group myResourceGroup --name myVM \
--username myUsername --ssh-key-value ~/.ssh/id_rsa.pub
Använda VMAccess-tillägget
Åtkomsttillägget för virtuella datorer för Linux läser i en json-fil som definierar åtgärder som ska utföras. Dessa åtgärder omfattar återställning av SSHD, återställning av en SSH-nyckel eller tillägg av en användare. Du använder fortfarande Azure CLI för att anropa VMAccess-tillägget, men du kan återanvända json-filerna på flera virtuella datorer om du vill. Med den här metoden kan du skapa en lagringsplats med json-filer som sedan kan anropas för givna scenarier.
Återställa SSHD
Skapa en fil med namnet settings.json
med följande innehåll:
{
"reset_ssh":True
}
Med Hjälp av Azure CLI anropar VMAccessForLinux
du sedan tillägget för att återställa SSHD-anslutningen genom att ange json-filen. I följande exempel används az vm extension set för att återställa SSHD på den virtuella datorn med namnet myVM
i myResourceGroup
. Använd dina egna värden på följande sätt:
az vm extension set --resource-group philmea --vm-name Ubuntu \
--name VMAccessForLinux --publisher Microsoft.OSTCExtensions --version 1.2 --settings settings.json
Återställa SSH-autentiseringsuppgifter för en användare
Om SSHD verkar fungera korrekt kan du återställa autentiseringsuppgifterna för en autentiseringsanvändare. Om du vill återställa lösenordet för en användare skapar du en fil med namnet settings.json
. I följande exempel återställs autentiseringsuppgifterna för myUsername
till det värde som anges i myPassword
. Ange följande rader i settings.json
filen med dina egna värden:
{
"username":"myUsername", "password":"myPassword"
}
Om du vill återställa SSH-nyckeln för en användare skapar du först en fil med namnet settings.json
. I följande exempel återställs autentiseringsuppgifterna för myUsername
till det värde som anges i myPassword
, på den virtuella datorn med namnet myVM
i myResourceGroup
. Ange följande rader i settings.json
filen med dina egna värden:
{
"username":"myUsername", "ssh_key":"mySSHKey"
}
När du har skapat json-filen använder du Azure CLI för att anropa VMAccessForLinux
tillägget för att återställa dina SSH-användarautentiseringsuppgifter genom att ange din json-fil. I följande exempel återställs autentiseringsuppgifterna på den virtuella datorn med namnet myVM
i myResourceGroup
. Använd dina egna värden på följande sätt:
az vm extension set --resource-group philmea --vm-name Ubuntu \
--name VMAccessForLinux --publisher Microsoft.OSTCExtensions --version 1.2 --settings settings.json
Återställa SSH-konfiguration
Själva SSHD-konfigurationen kan vara felkonfigurerad eller så påträffade tjänsten ett fel. Du kan återställa SSHD för att kontrollera att själva SSH-konfigurationen är giltig. Återställning av SSHD bör vara det första felsökningssteget du tar.
I följande exempel återställs SSHD på en virtuell dator med namnet myVM
i resursgruppen med namnet myResourceGroup
. Använd dina egna namn på virtuella datorer och resursgrupper på följande sätt:
azure vm reset-access --resource-group myResourceGroup --name myVM \
--reset-ssh
Återställa SSH-autentiseringsuppgifter för en användare
Om SSHD verkar fungera korrekt kan du återställa lösenordet för en autentiseringsanvändare. I följande exempel återställs autentiseringsuppgifterna för myUsername
till det värde som anges i myPassword
, på den virtuella datorn med namnet myVM
i myResourceGroup
. Använd dina egna värden på följande sätt:
azure vm reset-access --resource-group myResourceGroup --name myVM \
--user-name myUsername --password myPassword
Om du använder SSH-nyckelautentisering kan du återställa SSH-nyckeln för en viss användare. I följande exempel uppdateras SSH-nyckeln som lagras i ~/.ssh/id_rsa.pub
för användaren med namnet myUsername
, på den virtuella datorn med namnet myVM
i myResourceGroup
. Använd dina egna värden på följande sätt:
azure vm reset-access --resource-group myResourceGroup --name myVM \
--user-name myUsername --ssh-key-file ~/.ssh/id_rsa.pub
Starta om en virtuell dator
Om du har återställt SSH-konfigurationen och autentiseringsuppgifterna för användaren, eller påträffade ett fel när du gjorde det, kan du prova att starta om den virtuella datorn för att åtgärda underliggande beräkningsproblem.
Azure Portal
Om du vill starta om en virtuell dator med Hjälp av Azure-portalen väljer du den virtuella datorn och väljer sedan Starta om som i följande exempel:
Azure CLI
I följande exempel används az vm restart för att starta om den virtuella datorn med namnet myVM
i resursgruppen med namnet myResourceGroup
. Använd dina egna värden på följande sätt:
az vm restart --resource-group myResourceGroup --name myVM
Distribuera om en VM
Du kan distribuera om en virtuell dator till en annan nod i Azure, vilket kan åtgärda eventuella underliggande nätverksproblem. Information om hur du distribuerar om en virtuell dator finns i Distribuera om den virtuella datorn till en ny Azure-nod.
Kommentar
När den här åtgärden är klar går tillfälliga diskdata förlorade och dynamiska IP-adresser som är associerade med den virtuella datorn uppdateras.
Azure Portal
Om du vill distribuera om en virtuell dator med hjälp av Azure-portalen väljer du den virtuella datorn och rullar ned till hjälpavsnittet. Välj Omdistribuera som i följande exempel:
Azure CLI
I följande exempel använder du az vm redeploy för att distribuera om den virtuella datorn med namnet myVM
i resursgruppen med namnet myResourceGroup
. Använd dina egna värden på följande sätt:
az vm redeploy --resource-group myResourceGroup --name myVM
Ytterligare resurser
- Om du fortfarande inte kan SSH till den virtuella datorn efter att du har följt stegen efter kan du läsa mer detaljerade felsökningssteg för att granska ytterligare steg för att lösa problemet.
- Mer information om hur du felsöker programåtkomst finns i Felsöka åtkomst till ett program som körs på en virtuell Azure-dator
- Mer information om hur du felsöker virtuella datorer som har skapats med hjälp av den klassiska distributionsmodellen finns i Så här återställer du ett lösenord eller SSH för Linux-baserade virtuella datorer.
Kontakta oss för att få hjälp
Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.