Använda SSH-nyckelautentisering

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

Du kan ansluta till dina Git-lagringsplatser via SSH på macOS, Linux eller Windows för att på ett säkert sätt ansluta till Azure DevOps.

Viktigt!

SSH-URL:er har ändrats, men gamla SSH-URL:er fortsätter att fungera. Om du redan har konfigurerat SSH uppdaterar du dina fjärr-URL:er till det nya formatet:

Uppdaterade SSH-URL:er börjar med ssh.dev.azure.com. De tidigare URL:erna använder vs-ssh.visualstudio.com.

  • Kontrollera vilka fjärranslutningar som använder SSH. Kör git remote -v i gränssnittet eller använd en GUI-klient i stället.
  • Besök din lagringsplats på webben och välj Klona.
  • Välj SSH och kopiera den nya SSH-URL:en.
  • I din gränssnittskörning git remote set-url <remote name> <new SSH URL> för varje fjärrlagringsplats som du vill uppdatera. Du kan också använda en GUI-klient för att uppdatera fjärr-URL:erna.

Så här fungerar SSH-nyckelautentisering

Autentisering med offentlig SSH-nyckel fungerar med ett asymmetriskt par med genererade krypteringsnycklar. Den offentliga nyckeln delas med Azure DevOps och används för att verifiera den första SSH-anslutningen. Den privata nyckeln hålls säker och säker i systemet.

Konfigurera SSH-nyckelautentisering

Följande steg omfattar konfiguration av SSH-nyckelautentisering på följande plattformar med hjälp av kommandoraden (kallas shelläven ):

Kommentar

Från och med Visual Studio 2017 kan SSH användas för att ansluta till Azure DevOps Git-lagringsplatser.

Dricks

I Windows rekommenderar vi användning av Git Credential Manager eller personliga åtkomsttoken.

Steg 1: Skapa dina SSH-nycklar

Kommentar

Om du redan har skapat RSA SSH-nycklar i systemet hoppar du över det här steget och konfigurerar dina SSH-nycklar. Kontrollera detta genom att gå till din hemkatalog och titta på .ssh mappen (%UserProfile%\.ssh\ i Windows eller ~/.ssh/ i Linux, macOS och Windows med Git Bash). Om du ser två filer med namnet id_rsa och fortsätter med att konfigurera dina SSH-nycklarid_rsa.pub.

Om du vill använda nyckelbaserad autentisering måste du först generera offentliga/privata nyckelpar för klienten. ssh-keygen.exe används för att generera nyckelfiler och algoritmerna DSA, RSA, ECDSA eller Ed25519 kan anges. Om ingen algoritm anges används Ed25519.

Kommentar

Den enda SSH-nyckeltypen som stöds av Azure DevOps är RSA.

Om du vill generera nyckelfiler med hjälp av RSA-algoritmen som stöds av Azure DevOps (antingen RSA-SHA2-256 eller RSA-SHA2-512) kör du något av följande kommandon från ett PowerShell eller ett annat gränssnitt, till exempel bash på klienten:

ssh-keygen -t rsa-sha2-256

Eller

ssh-keygen -t rsa-sha2-512

Utdata från kommandot ska visa följande utdata (var username är ditt användarnamn):

Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\username/.ssh/id_rsa):

Du kan trycka på Retur för att acceptera standardvärdet eller ange en sökväg och/eller filnamn där du vill att dina nycklar ska genereras. Nu uppmanas du att använda en lösenfras för att kryptera dina privata nyckelfiler. Lösenfrasen kan vara tom men rekommenderas inte. Lösenfrasen fungerar med nyckelfilen för att tillhandahålla tvåfaktorautentisering.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\username/.ssh/id_rsa.
Your public key has been saved in C:\Users\username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:FHK6WjcUkcfQjdorarzlak1Ob/x7AmqQmmx5ryYYV+8 username@LOCAL-HOSTNAME
The key's randomart image is:
+---[RSA 3072]----+
|      . ** o     |
|       +.o= .    |
|      . o+       |
|      .+. .      |
|     .ooS  .     |
|  . .oo.=.o      |
|   =.= O.= .     |
|  . B BoE + . .  |
|   . *+*o. .o+   |
+----[SHA256]-----+

Nu har du ett offentligt/privat RSA-nyckelpar på den angivna platsen. .pub-filerna är offentliga nycklar och filer utan tillägg är privata nycklar:

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        10/11/2022   6:29 PM           2610 id_rsa
-a----        10/11/2022   6:29 PM            578 id_rsa.pub

Viktigt!

Dela aldrig innehållet i din privata nyckel. Om den privata nyckeln komprometteras kan angripare använda den för att lura servrar att tro att anslutningen kommer från dig. Privata nyckelfiler motsvarar ett lösenord och bör skyddas på samma sätt.

Steg 2: Lägg till den offentliga nyckeln i Azure DevOps

Associera den offentliga nyckeln som genererades i föregående steg med ditt användar-ID.

Kommentar

Du måste upprepa den här åtgärden för varje organisation som du har åtkomst till och vill använda SSH med.

  1. Öppna säkerhetsinställningarna genom att bläddra till webbportalen och välja ikonen bredvid avataren längst upp till höger i användargränssnittet. Välj offentliga SSH-nycklar på menyn som visas.

    Skärmbild som visar menyalternativet för offentliga SSH-nycklar och användaravatar som valts i Azure DevOps.

  2. Välj + Ny nyckel.

    Skärmbild som visar åtkomst till Säkerhetskonfiguration i Azure DevOps.

  3. Kopiera innehållet i den offentliga nyckeln (till exempel id_rsa.pub) som du genererade till fältet Offentliga nyckeldata .

    Viktigt!

    Undvik att lägga till blanksteg eller nya rader i fältet Nyckeldata , eftersom de kan leda till att Azure DevOps använder en ogiltig offentlig nyckel. När du klistrar in nyckeln läggs ofta en ny rad till i slutet. Se till att ta bort den här nya filen om den inträffar.

    Skärmbild som visar hur du konfigurerar en offentlig nyckel i Azure DevOps.

  4. Ge nyckeln en användbar beskrivning (den här beskrivningen visas på sidan offentliga SSH-nycklar för din profil) så att du kan komma ihåg den senare. Välj Spara för att lagra den offentliga nyckeln. När du har sparat den kan du inte ändra nyckeln. Du kan ta bort nyckeln eller skapa en ny post för en annan nyckel. Det finns inga begränsningar för hur många nycklar du kan lägga till i din användarprofil. Observera också att SSH-nycklar som lagras i Azure DevOps upphör att gälla efter ett år. Om din nyckel upphör att gälla kan du ladda upp en ny nyckel eller samma för att fortsätta att komma åt Azure DevOps via SSH.

  5. På översiktssidan för SSH Public Keys visas serverns fingeravtryck. Anteckna SHA256-fingeravtrycket som ska användas när du först ansluter till Azure DevOps via SSH.

    Skärmbild av åtkomst till säkerhetskonfiguration i Azure DevOps Services.

  6. Testa anslutningen genom att köra följande kommando:

    ssh -T git@ssh.dev.azure.com
    

    Om du ansluter för första gången bör du få följande utdata:

    The authenticity of host 'ssh.dev.azure.com (<IP>)' can't be established.
    RSA key fingerprint is SHA256:ohD8VZEXGWo6Ez8GSEJQ9WpafgLFsOfLOtGGQCQo6Og.
    This key is not known by any other names
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    

    Jämför fingeravtrycket med SHA256-fingeravtrycket som visas på sidan tidigare omnämnanden av offentliga SSH-nycklar . Fortsätt bara om de matchar!

  7. Ange yes för att fortsätta. Om allt är korrekt konfigurerat bör utdata se ut så här:

     Warning: Permanently added 'ssh.dev.azure.com' (RSA) to the list of known hosts.
     remote: Shell access is not supported.
     shell request failed on channel 0
    

    Om inte, se avsnittet om frågor och felsökning.

Steg 3: Klona Git-lagringsplatsen med SSH

Kommentar

Information om hur du använder SSH med en lagringsplats som tidigare klonats via HTTPS finns i Uppdatera dina fjärrdatorer till SSH.

  1. Kopiera SSH-klonings-URL:en från webbportalen. I det här exemplet är SSH-klon-URL:en för en lagringsplats i en organisation med namnet fabrikam-fiber, vilket anges av den första delen av URL:en efter dev.azure.com.

    Skärmbild som visar Azure Repos SSH-klonad URL

    Kommentar

    Med Azure DevOps Services är dev.azure.com/{your organization}/{your project}formatet för projekt-URL:en . Det tidigare format som refererar till visualstudio.com formatet stöds dock fortfarande. Mer information finns i Introduktion till Azure DevOps, Växla befintliga organisationer för att använda den nya domännamns-URL:en.

  2. Kör git clone från kommandotolken.

    git clone git@ssh.dev.azure.com:v3/fabrikam-fiber/FabrikamFiber/FabrikamFiber
    

    Om du inte använder en SSH-agent uppmanas du att ange lösenfrasen:

    Cloning into 'FabrikamFiber'...
    Enter passphrase for key '/c/Users/username/.ssh/id_rsa':
    remote: Azure Repos
    remote: Found 127 objects to send. (50 ms)
    Receiving objects: 100% (127/127), 56.67 KiB | 2.58 MiB/s, done.
    Resolving deltas: 100% (15/15), done.
    

    Om du i stället uppmanas att verifiera ett fingeravtryck läser du Steg 2: Lägg till den offentliga nyckeln i Azure DevOps igen. Läs avsnittet om frågor och felsökning för andra problem.

Dricks

För att få ut mesta möjliga av SSH är det vanligt att använda en SSH-agent för att hantera dina SSH-nycklar. Att konfigurera en agent ligger dock utanför omfånget för den här artikeln.

Frågor och felsökning

S: Det finns två olika varningsmeddelanden som kan se:

ssh-rsa is about to be deprecated and your request has been throttled. Please use rsa-sha2-256 or rsa-sha2-512 instead. Your session will continue automatically. For more details see https://devblogs.microsoft.com/devops/ssh-rsa-deprecation.

Eller

You’re using ssh-rsa that is about to be deprecated and your request has been blocked intentionally. Any SSH session using ssh-rsa is subject to brown out (failure during random time periods). Please use rsa-sha2-256 or rsa-sha2-512 instead. For more details see https://devblogs.microsoft.com/devops/ssh-rsa-deprecation.

Om du har ändrat din SSH-konfiguration för att nedgradera säkerhetsinställningarna för Azure DevOps genom att lägga till följande i filen ~/.ssh/config (%UserProfile%\.ssh\config i Windows):

Host ssh.dev.azure.com vs-ssh.visualstudio.com
  HostkeyAlgorithms +ssh-rsa

Ta bort dessa rader nu och se till att rsa-sha2-256 och/eller rsa-sha2-512 tillåts.

Mer information finns i blogginlägget.

F: SSH kan inte upprätta en anslutning. Vad ska jag göra?

S: Det finns flera olika problem som du kan uppleva:

  • Användning av ssh-rsa som inte stöds

    You’re using ssh-rsa that is unsupported. Please use rsa-sha2-256 or rsa-sha2-512 instead. For more details see https://devblogs.microsoft.com/devops/ssh-rsa-deprecation.
    

    Om du har ändrat din SSH-konfiguration för att nedgradera säkerhetsinställningarna för Azure DevOps genom att lägga till följande i filen ~/.ssh/config (%UserProfile%\.ssh\config i Windows):

    Host ssh.dev.azure.com vs-ssh.visualstudio.com
       HostkeyAlgorithms +ssh-rsa
    

    Ta bort dessa rader nu och se till att rsa-sha2-256 och/eller rsa-sha2-512 tillåts.

    Mer information finns i blogginlägget.

  • Ingen matchande värdnyckel

    Det här problemet bör inte inträffa i Azure DevOps Service eller på nyare Azure DevOps Server-versioner som nämns i blogginlägget.

    Unable to negotiate with <IP> port 22: no matching host key type found. Their offer: ssh-rsa
    

    Ändra din SSH-konfiguration för att nedgradera säkerhetsinställningarna för Azure DevOps genom att lägga till följande i filen ~/.ssh/config (%UserProfile%\.ssh\config i Windows):

    Host ssh.dev.azure.com vs-ssh.visualstudio.com
       HostkeyAlgorithms +ssh-rsa
    

    Viktigt!

    OpenSSH inaktuella algoritmen för signatur för offentlig ssh-rsa nyckel i version 8.2 och inaktiverade den som standard i version 8.8.

  • Ingen matchande MAC

    Unable to negotiate with <IP> port 22: no matching MAC found. Their offer: hmac-sha2-256,hmac-sha2-512
    

    Ändra din SSH-konfiguration för att nedgradera säkerhetsinställningarna för Azure DevOps genom att lägga till följande i filen ~/.ssh/config (%UserProfile%\.ssh\config i Windows):

    Host ssh.dev.azure.com vs-ssh.visualstudio.com
       MACs +hmac-sha2-512,+hmac-sha2-256
    
  • Ingen matchande nyckelutbytesmetod

    Unable to negotiate with <IP> 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256
    

    Ändra din SSH-konfiguration för att nedgradera säkerhetsinställningarna för Azure DevOps genom att lägga till följande i filen ~/.ssh/config (%UserProfile%\.ssh\config i Windows):

    Host ssh.dev.azure.com vs-ssh.visualstudio.com
       KexAlgorithms +diffie-hellman-group-exchange-sha256,+diffie-hellman-group14-sha1,+diffie-hellman-group1-sha1
    

    Viktigt!

    Nyckelutbytesalgoritmen diffie-hellman-group1-sha1 har inaktiverats som standard i version 6.9 av OpenSSH och diffie-hellman-group14-sha1 i version 8.2.

Dricks

För lokala instanser av Azure DevOps Server och TFS använder du lämpligt värdnamn på raden i Host stället för ssh.dev.azure.com vs-ssh.visualstudio.com.

F: Hur kan jag få Git att komma ihåg lösenfrasen för min nyckel?

S: Du kan använda en SSH-agent. Linux, macOS och Windows (från och med Windows 10 (version 1809) eller med Git för Windows med Git Bash) levereras alla med en SSH-agent. SSH-agenten kan användas för att cachelagrat dina SSH-nycklar för upprepad användning. Mer information om hur du använder den finns i SSH-leverantörens handbok.

F: Jag använder PuTTY som min SSH-klient och genererade mina nycklar med PuTTYgen. Kan jag använda dessa nycklar med Azure DevOps Services?

S: Ja. Läs in den privata nyckeln med PuTTYgen, gå till menyn Konverteringar och välj Exportera OpenSSH-nyckel. Spara filen med den privata nyckeln och följ sedan stegen för att konfigurera nondefault-nycklar. Kopiera din offentliga nyckel direkt från PuTTYgen-fönstret och klistra in i fältet Nyckeldata i dina säkerhetsinställningar.

F: Hur kan jag kontrollera att den offentliga nyckeln jag laddade upp är samma nyckel som min lokala nyckel?

S: Du kan verifiera fingeravtrycket för den offentliga nyckel som laddats upp med den som visas i din profil via följande ssh-keygen kommandokörning mot din offentliga nyckel med hjälp av kommandoraden. Du måste ändra sökvägen och filnamnet för den offentliga nyckeln om du inte använder standardinställningarna.

Kommentar

Från och med augusti/september 2024 migrerar vi från MD5 till SHA-256-hashar. Du kan behöva välja rätt funktion under övergångsperioden.

ssh-keygen -l -E md5 -f <path_to_your_public_key> -- use this for MD5 fingerprints
ssh-keygen -l -E sha256 -f <path_to_your_public_key> -- use this for SHA-256 fingerprints

Du kan sedan jämföra signaturen med den i din profil. Den här kontrollen är användbar om du har anslutningsproblem eller har problem med att felaktigt klistra in den offentliga nyckeln i fältet Nyckeldata när du lägger till nyckeln i Azure DevOps.

F: Hur kan jag börja använda SSH på en lagringsplats där jag för närvarande använder HTTPS?

S: Du måste uppdatera fjärren origin i Git för att växla över från en HTTPS till SSH-URL. När du har SSH-klonings-URL :en kör du följande kommando:

git remote set-url origin <SSH URL to your repository>

Git-kommandon som kommer åt fjärranropet origin använder SSH.

F: Jag använder Git LFS med Azure DevOps Services och får felmeddelanden när jag hämtar filer som spåras av Git LFS.

S: Azure DevOps Services stöder för närvarande inte LFS via SSH. Använd HTTPS när du ska ansluta till lagringsplatser med Git LFS-spårade filer.

F: Hur kan jag använda en nondefault-nyckelplats, dvs. inte ~/.ssh/id_rsa och ~/.ssh/id_rsa.pub?

S: Utför följande två uppgifter om du vill använda en nyckel som lagras på en annan plats än standard:

  1. Nycklarna måste finnas i en mapp som bara du kan läsa eller redigera. Om mappen har bredare behörigheter använder SSH inte nycklarna.

  2. Du måste till exempel meddela SSH platsen för nyckeln genom att ange den som en "identitet" i SSH-konfigurationen:

    Host ssh.dev.azure.com
      IdentityFile ~/.ssh/id_rsa_azure
      IdentitiesOnly yes
    

Inställningen IdentitiesOnly yes säkerställer att SSH inte använder någon annan tillgänglig identitet för att autentisera. Den här inställningen är särskilt viktig om fler än en identitet är tillgänglig.

F: Jag har flera SSH-nycklar. Hur gör jag för att använda rätt SSH-nyckel för Azure DevOps?

S: När du konfigurerar flera nycklar för en SSH-klient försöker klienten vanligtvis autentisera med varje nyckel sekventiellt tills SSH-servern accepterar en.

Den här metoden fungerar dock inte med Azure DevOps på grund av tekniska begränsningar relaterade till SSH-protokollet och strukturen för våra Git SSH-URL:er. Azure DevOps accepterar den första nyckeln som tillhandahålls av klienten under autentiseringen. Om den här nyckeln är ogiltig för den begärda lagringsplatsen misslyckas begäran utan att några andra tillgängliga nycklar görs, vilket resulterar i följande fel:

remote: Public key authentication failed.
fatal: Could not read from remote repository.

För Azure DevOps måste du konfigurera SSH för att uttryckligen använda en specifik nyckelfil. Proceduren är densamma som när du använder en nyckel som lagras på en nondefault-plats. Be SSH att använda rätt SSH-nyckel för Azure DevOps-värden.

F: Hur gör jag för att använda olika SSH-nycklar för olika organisationer i Azure DevOps?

S: Azure DevOps accepterar blint den första nyckeln som klienten tillhandahåller under autentiseringen. Om nyckeln är ogiltig för den begärda lagringsplatsen misslyckas begäran med följande fel:

remote: Public key authentication failed.
fatal: Could not read from remote repository.

Det här felet beror på att alla Azure DevOps-URL:er delar samma värdnamn (ssh.dev.azure.com), vilket gör det omöjligt för SSH att skilja mellan dem som standard. Du kan dock ändra SSH-konfigurationen för att skilja mellan olika organisationer genom att tillhandahålla distinkta nycklar för var och en. Använd värdalias för att skapa separata Host avsnitt i SSH-konfigurationsfilen.

# The settings in each Host section are applied to any Git SSH remote URL with a
# matching hostname.
# Generally:
# * SSH uses the first matching line for each parameter name, e.g. if there's
#   multiple values for a parameter across multiple matching Host sections
# * "IdentitiesOnly yes" prevents keys cached in ssh-agent from being tried before
#   the IdentityFile values we explicitly set.
# * On Windows, ~/.ssh/your_private_key maps to %USERPROFILE%\.ssh\your_private_key,
#   e.g. C:\Users\<username>\.ssh\your_private_key.

# Imagine that we have the following two SSH URLs:
# * git@ssh.dev.azure.com:v3/Fabrikam/Project1/fab_repo
#   * For this, we want to use `fabrikamkey`, so we'll create `devops_fabrikam` as
#     a Host alias and tell SSH to use `fabrikamkey`.
# * git@ssh.dev.azure.com:v3/Contoso/Project2/con_repo
#   * For this, we want to use `contosokey`, so we'll create `devops_contoso` as
#     a Host alias and tell SSH to use `contosokey`.
#
# To set explicit keys for the two host aliases and to tell SSH to use the correct
# actual hostname, add the next two Host sections:
Host devops_fabrikam
  HostName ssh.dev.azure.com
  IdentityFile ~/.ssh/private_key_for_fabrikam
  IdentitiesOnly yes

Host devops_contoso
  HostName ssh.dev.azure.com
  IdentityFile ~/.ssh/private_key_for_contoso
  IdentitiesOnly yes

I stället för att använda de riktiga URL:erna ska du efteråt tala om för Git att du vill använda dessa URL:er för varje lagringsplats som fjärranslutning genom att ersätta värdnamnet i de befintliga fjärrdatorerna med devops_fabrikam devops_contoso respektive . Till exempel git@ssh.dev.azure.com:v3/Fabrikam/Project1/fab_repo skulle bli git@devops_fabrikam:v3/Fabrikam/Project1/fab_repo.

F: Vilka meddelanden kan jag få om mina SSH-nycklar?

S: När du registrerar en ny SSH-nyckel med Azure DevOps Services får du ett e-postmeddelande som informerar dig när en ny SSH-nyckel läggs till i ditt konto.

Exempel på SSH-meddelanden

F: Vad gör jag om jag tror att någon annan än jag lägger till SSH-nycklar på mitt konto?

S: Om du får ett meddelande om SSH-nyckelregistrering som du inte initierade kan dina autentiseringsuppgifter komprometteras.

Nästa steg är att undersöka om lösenordet har komprometterats eller inte. Att ändra ditt lösenord är alltid ett bra första steg för att försvara dig mot den här attackvektorn. Om du är en Microsoft Entra-användare kan du prata med administratören för att kontrollera om ditt konto har använts från en okänd källa/plats.

F: Vad gör jag om jag fortfarande uppmanas att ange mitt lösenord och GIT_SSH_COMMAND="ssh -v" git fetch visar no mutual signature algorithm eller corresponding algo not in PubkeyAcceptedAlgorithms?

S: Vissa Linux-distributioner, till exempel Fedora Linux, har kryptoprinciper som kräver starkare SSH-signaturalgoritmer än vad Azure DevOps stöder (från och med januari 2021). Det finns en öppen funktionsbegäran för att lägga till den här supporten.

Du kan kringgå problemet genom att lägga till följande kod i SSH-konfigurationen (~/.ssh/config):

Host ssh.dev.azure.com vs-ssh.visualstudio.com
  PubkeyAcceptedKeyTypes +ssh-rsa

Dricks

För lokala instanser av Azure DevOps Server och TFS använder du lämpligt värdnamn på raden i Host stället för ssh.dev.azure.com vs-ssh.visualstudio.com.