Dela via


Använda SSH-nyckelautentisering

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

Du kan ansluta till dina Git-lagringsplatser via SSH i macOS, Linux eller Windows för att kunna ansluta på ett säkert sätt med HTTPS-autentisering.

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 RSA.

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 (där username ersätts av 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 den 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 visas en anteckning högst upp som innehåller serverns fingeravtryck. Anteckna dem eftersom de krävs 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 det var första gången du ansluter 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 det angivna fingeravtrycket med de fingeravtryck som erbjuds på sidan med ovan nämnda inställningar. Fortsätt bara om de matchar!

    Om allt är korrekt konfigurerat bör utdata se ut så här:

    remote: Shell access is not supported.
    

    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
    

    Du bör nu uppmanas att ange lösenfrasen för SSH-nyckeln innan du kan fortsätta om den inte hanteras av en SSH-agent:

    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. För andra problem kan du läsa avsnittet om frågor och felsökning.

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 du 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.

Du kan tidigare ha ä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 är tillåtna.

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 kan uppstå:

  • 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.
    

    Du kan tidigare ha ä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 är tillåtna.

    Mer information finns i blogginlägget.

  • Ingen matchande värdnyckel

    Detta bör inträffa varken 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 för det. 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 icke-standardnycklar. 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.

ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub

Du kan sedan jämföra MD5-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 nu 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 icke-standardnyckelplats, 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 meddela SSH platsen för nyckeln, t.ex. 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. Detta är särskilt viktigt om fler än en identitet är tillgänglig.

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

S: Om du konfigurerar flera nycklar för en SSH-klient och ansluter till en SSH-server kan klienten prova nycklarna en i taget tills servern accepterar en.

Detta fungerar dock inte med Azure DevOps av tekniska skäl som rör SSH-protokollet och hur våra Git SSH-URL:er är strukturerade. 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 utan att andra tillgängliga nycklar försöker utföras på grund av 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 plats som inte är standard. Be SSH att använda rätt SSH-nyckel för Azure DevOps-värden.

F: Hur använder jag 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.

Du kan dock ändra din SSH-konfiguration för att skilja mellan olika organisationer och ange olika nycklar för var och en. För att göra detta måste du använda värdalias för att skapa separata Host avsnitt i SSH-konfigurationen. Det beror på att alla värdbaserade Azure DevOps-URL:er har samma värdnamn (ssh.dev.azure.com), så SSH har inget sätt att särskilja dem som standard.

# 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 om att en ny SSH-nyckel har lagts 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 att en SSH-nyckel har registrerats och du inte laddade upp den manuellt till tjänsten kan dina autentiseringsuppgifter ha komprometterats.

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.