Dela via


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.

  1. Återställ SSH-konfigurationen.
  2. Återställ autentiseringsuppgifterna för användaren.
  3. 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.
  4. 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.
  5. Starta om den virtuella datorn.
  6. 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:

Skärmbild för att återställa S S H-konfigurationen eller autentiseringsuppgifterna i Azure-portalen.

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

Skärmbild för att starta om en virtuell dator i Azure-portalen.

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:

Skärmbild för att distribuera om en virtuell dator i Azure-portalen.

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

Kontakta oss om du behöver hjälp

Om du har frågor eller behöver hjälp skapar du en supportbegäran eller frågar Azure Community-support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.