Sdílet prostřednictvím


Použití ověření klíče SSH

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

K úložištům Git se můžete připojit přes SSH v macOS, Linuxu nebo Windows, abyste se mohli bezpečně připojit pomocí Azure DevOps.

Důležité

Adresy URL SSH se změnily, ale staré adresy URL SSH nadále fungují. Pokud jste už nastavili SSH, aktualizujte vzdálené adresy URL na nový formát:

Aktuální adresy URL SSH začínají na ssh.dev.azure.com. Předchozí adresy URL se používají vs-ssh.visualstudio.com.

  • Ověřte, která vzdálená zařízení používají SSH. Spusťte git remote -v v prostředí nebo místo toho použijte klienta grafického uživatelského rozhraní.
  • Navštivte své úložiště na webu a vyberte Klonovat.
  • Vyberte SSH a zkopírujte novou adresu URL SSH.
  • V prostředí běží git remote set-url <remote name> <new SSH URL> pro každé vzdálené úložiště, které chcete aktualizovat. Případně použijte klienta grafického uživatelského rozhraní k aktualizaci vzdálených adres URL.

Jak funguje ověřování klíčů SSH

Ověřování pomocí veřejného klíče SSH funguje s asymetrickým párem vygenerovaných šifrovacích klíčů. Veřejný klíč se sdílí s Azure DevOps a používá se k ověření počátečního připojení SSH. Privátní klíč je v systému bezpečný a zabezpečený.

Nastavení ověřování pomocí klíče SSH

Následující kroky zahrnují konfiguraci ověřování pomocí klíče SSH na následujících platformách pomocí příkazového řádku (označovaného shelltaké):

Tip

Ve Windows doporučujeme používat Git Credential Manager místo SSH.

Krok 1: Vytvoření klíčů SSH

Poznámka:

Pokud jste už v systému vytvořili klíče RSA SSH, přeskočte tento krok a nakonfigurujte klíče SSH. Pokud chcete ověřit, že přejdete do svého domovského .ssh adresáře a podíváte se do složky (%UserProfile%\.ssh\ ve Windows nebo ~/.ssh/ v Linuxu, macOS a Windows s Git Bashem). Pokud se zobrazí dva pojmenované id_rsa soubory a id_rsa.pub v uvedeném pořadí pokračujte konfigurací klíčů SSH.

Pokud chcete použít ověřování založené na klíči, musíte nejprve pro klienta vygenerovat páry veřejného a privátního klíče. ssh-keygen.exe slouží ke generování klíčových souborů a algoritmů DSA, RSA, ECDSA nebo Ed25519 je možné zadat. Pokud není zadán žádný algoritmus, použije se Ed25519.

Poznámka:

Jediným typem klíče SSH, který Azure DevOps podporuje, je RSA.

Pokud chcete vygenerovat soubory klíčů pomocí algoritmu RSA, který podporuje Azure DevOps (RSA-SHA2-256 nebo RSA-SHA2-512), spusťte jeden z následujících příkazů z PowerShellu nebo jiného prostředí, jako bash je například váš klient:

ssh-keygen -t rsa-sha2-256

Nebo

ssh-keygen -t rsa-sha2-512

Výstup příkazu by měl zobrazit následující výstup (kde username je vaše uživatelské jméno):

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

Stisknutím klávesy Enter můžete přijmout výchozí hodnotu nebo zadat cestu nebo název souboru, ve kterém chcete, aby se klíče vygenerovaly. V tuto chvíli se zobrazí výzva k použití přístupového hesla k šifrování souborů privátního klíče. Přístupové heslo může být prázdné, ale nedoporučuje se. Přístupové heslo pracuje se souborem klíče a poskytuje dvoufaktorové ověřování.

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]-----+

Teď máte v zadaném umístění pár veřejného nebo privátního klíče RSA. Soubory .pub jsou veřejné klíče a soubory bez přípony jsou privátní klíče:

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

Důležité

Nikdy nesdílejte obsah vašeho privátního klíče. Pokud dojde k ohrožení zabezpečení privátního klíče, útočníci ho můžou použít k tomu, aby servery napadlo, že připojení pochází od vás. Soubory privátního klíče jsou ekvivalentem hesla a měly by být chráněny stejným způsobem.

Krok 2: Přidání veřejného klíče do Azure DevOps

Přidružte veřejný klíč vygenerovaný v předchozím kroku k ID uživatele.

Poznámka:

Tuto operaci musíte opakovat pro každou organizaci, ke které máte přístup, a chcete s protokolem SSH používat protokol SSH.

  1. Otevřete nastavení zabezpečení tak, že přejdete na webový portál a vyberete ikonu vedle avatara v pravém horním rohu uživatelského rozhraní. V zobrazené nabídce vyberte veřejné klíče SSH.

    Snímek obrazovky znázorňující položku nabídky veřejných klíčů SSH a avatar uživatele vybraný v Azure DevOps

  2. Vyberte + Nový klíč.

    Snímek obrazovky znázorňující přístup ke konfiguraci zabezpečení v Azure DevOps

  3. Zkopírujte obsah veřejného klíče (například id_rsa.pub), který jste vygenerovali do pole Data veřejného klíče.

    Důležité

    Vyhněte se přidávání prázdných znaků nebo nových řádků do pole Key Data , protože můžou způsobit, že Azure DevOps použije neplatný veřejný klíč. Při vkládání do klíče se na konec často přidává nový řádek. Pokud k němu dojde, nezapomeňte tento nový řádek odebrat.

    Snímek obrazovky znázorňující konfiguraci veřejného klíče v Azure DevOps

  4. Zadejte užitečný popis klíče (tento popis se zobrazí na stránce veřejných klíčů SSH pro váš profil), abyste si ho mohli později zapamatovat. Vyberte Uložit a uložte veřejný klíč. Po uložení nemůžete klíč změnit. Klíč můžete odstranit nebo vytvořit novou položku pro jiný klíč. Neexistuje žádná omezení počtu klíčů, které můžete přidat do profilu uživatele. Mějte také na paměti, že platnost klíčů SSH uložených v Azure DevOps vyprší po jednom roce. Pokud platnost klíče vyprší, můžete nahrát nový klíč nebo stejný klíč, abyste mohli dál přistupovat k Azure DevOps přes SSH.

  5. Na stránce s přehledem veřejných klíčů SSH se zobrazí otisky prstů serveru. Poznamenejte si otisk prstu SHA256, který se použije při prvním připojení k Azure DevOps přes SSH.

    Snímek obrazovky s přístupem ke konfiguraci zabezpečení v Azure DevOps Services

  6. Otestujte připojení spuštěním následujícího příkazu:

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

    Pokud se připojujete poprvé, měli byste obdržet následující výstup:

    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])?
    

    Porovnejte otisk prstu s otiskem prstu SHA256 zobrazeným na předchozí stránce s veřejnými klíči SSH. Pokračujte pouze v případě, že se shodují!

  7. Pokračujte zadáním yes . Pokud je vše správně nakonfigurované, měl by výstup vypadat takto:

     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
    

    Pokud ne, přečtěte si část o otázkách a řešení potíží.

Krok 3: Klonování úložiště Git pomocí SSH

Poznámka:

Pokud chcete použít SSH s úložištěm, které jste předtím naklonovali přes HTTPS, přečtěte si informace o aktualizaci vzdálených zařízení na SSH.

  1. Zkopírujte adresu URL klonování SSH z webového portálu. V tomto příkladu je adresa URL klonu SSH určená pro úložiště v organizaci s názvem fabrikam-fiber, jak je uvedeno v první části adresy URL za dev.azure.com.

    Snímek obrazovky znázorňující klonovanou adresu URL SSH v Azure Repos

    Poznámka:

    Ve službě Azure DevOps Services je dev.azure.com/{your organization}/{your project}formát adresy URL projektu . Předchozí formát, který odkazuje na visualstudio.com formát, je však stále podporovaný. Další informace najdete v tématu Představujeme Azure DevOps a přepněte existující organizace tak, aby používaly novou adresu URL názvu domény.

  2. Spusťte git clone z příkazového řádku.

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

    Pokud nepoužíváte agenta SSH, zobrazí se výzva k zadání hesla:

    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.
    

    Pokud se místo toho zobrazí výzva k ověření otisku prstu, přečtěte si krok 2: Znovu přidejte veřejný klíč do Azure DevOps . V případě jiných problémů si přečtěte část o otázkách a řešení potíží.

Tip

Abyste mohli SSH maximálně využít, je běžné, že ke správě klíčů SSH používáte agenta SSH. Nastavení agenta je ale nad rámec tohoto článku.

Dotazy a řešení potíží

A: Můžou se zobrazit dvě různé zprávy upozornění:

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.

Nebo

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.

Pokud jste upravili konfiguraci SSH tak, aby downgradovaly nastavení zabezpečení pro Azure DevOps přidáním následujícího souboru (~/.ssh/config%UserProfile%\.ssh\configve Windows):

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

Odeberte tyto řádky a ujistěte se, že rsa-sha2-256 jsou povolené.rsa-sha2-512

Další informace najdete v tomto blogovém příspěvku.

Otázka: SSH nemůže navázat připojení. Co mám dělat?

A: Může docházet k několika různým problémům:

  • Použití nepodporovaných ssh-rsa

    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.
    

    Pokud jste upravili konfiguraci SSH tak, aby downgradovaly nastavení zabezpečení pro Azure DevOps přidáním následujícího souboru (~/.ssh/config%UserProfile%\.ssh\configve Windows):

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

    Odeberte tyto řádky a ujistěte se, že rsa-sha2-256 jsou povolené.rsa-sha2-512

    Další informace najdete v tomto blogovém příspěvku.

  • Žádný odpovídající klíč hostitele

    K tomuto problému by nemělo dojít ve službě Azure DevOps Service ani v novějších verzích Azure DevOps Serveru, jak je uvedeno v blogovém příspěvku.

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

    Upravte konfiguraci SSH tak, aby se downgrade nastavení zabezpečení pro Azure DevOps přidala do souboru ~/.ssh/config (%UserProfile%\.ssh\config ve Windows):

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

    Důležité

    OpenSSH vyřadil ssh-rsa algoritmus podpisu veřejného klíče ve verzi 8.2 a ve výchozím nastavení ho zakázal ve verzi 8.8.

  • Žádný odpovídající mac

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

    Upravte konfiguraci SSH tak, aby se downgrade nastavení zabezpečení pro Azure DevOps přidala do souboru ~/.ssh/config (%UserProfile%\.ssh\config ve Windows):

    Host ssh.dev.azure.com vs-ssh.visualstudio.com
       MACs +hmac-sha2-512,+hmac-sha2-256
    
  • Žádná odpovídající metoda výměny klíčů

    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
    

    Upravte konfiguraci SSH tak, aby se downgrade nastavení zabezpečení pro Azure DevOps přidala do souboru ~/.ssh/config (%UserProfile%\.ssh\config ve Windows):

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

    Důležité

    Algoritmus diffie-hellman-group1-sha1 výměny klíčů byl ve výchozím nastavení zakázán ve verzi 6.9 OpenSSH a diffie-hellman-group14-sha1 ve verzi 8.2.

Tip

Pro instance Azure DevOps Serveru a TFS v místním prostředí použijte místo toho odpovídající název hostitele na Host řádku ssh.dev.azure.com vs-ssh.visualstudio.com.

Otázka: Jak si Git pamatuje heslo pro svůj klíč?

A: Můžete použít agenta SSH. Linux, macOS a Windows (počínaje Windows 10 (build 1809) nebo pomocí Gitu pro Windows s Git Bashem) se dodávají s agentem SSH. Agent SSH se dá použít k ukládání klíčů SSH do mezipaměti pro opakované použití. Podrobnosti o tom, jak ho používat, najdete v příručce dodavatele SSH.

Otázka: Jako klienta SSH používám PuTTY a vygeneruji své klíče pomocí PuTTYgenu. Můžu tyto klíče používat se službou Azure DevOps Services?

Odpověď: Ano. Načtěte privátní klíč pomocí PuTTYgenu, přejděte do nabídky Převody a vyberte Exportovat klíč OpenSSH. Uložte soubor privátního klíče a pak postupujte podle pokynů k nastavení nedefaultních klíčů. Zkopírujte veřejný klíč přímo z okna PuTTYgen a vložte ho do pole Data klíče v nastavení zabezpečení.

Otázka: Jak můžu ověřit, že veřejný klíč, který jsem nahrál, je stejný jako místní klíč?

A: Pomocí příkazového řádku můžete ověřit otisk veřejného klíče nahraného pomocí otisku prstu nahraného ve vašem profilu pomocí následujícího ssh-keygen příkazu, který se spustí proti vašemu veřejnému klíči. Pokud nepoužíváte výchozí hodnoty, musíte změnit cestu a název souboru veřejného klíče.

Poznámka:

Od srpna/září 2024 migrujeme z MD5 na hodnoty hash SHA-256. Možná budete muset zvolit správnou funkci během přechodného období.

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

Podpis pak můžete porovnat s podpisem ve vašem profilu. Tato kontrola je užitečná, pokud máte problémy s připojením nebo máte obavy ohledně nesprávného vložení veřejného klíče do pole Data klíče při přidávání klíče do Azure DevOps.

Otázka: Jak začít používat SSH v úložišti, kde aktuálně používám HTTPS?

A: Pokud chcete přejít z adresy HTTPS na adresu URL SSH, musíte aktualizovat origin vzdálené úložiště v Gitu. Jakmile budete mít adresu URL klonování SSH, spusťte následující příkaz:

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

Příkazy Gitu přistupující ke vzdálenému volaní origin používají SSH.

Otázka: Proč se mi při používání Git LFS s Azure DevOps Services zobrazují chyby při načítání souborů sledovaných pomocí Git LFS?

A: Azure DevOps Services v současné době nepodporuje protokol LFS přes SSH. K připojení k úložištím se soubory sledovanými pomocí Git LFS použijte HTTPS.

Otázka: Jak můžu použít nedefaultní umístění klíče, tzn. ne ~/.ssh/id_rsa a ~/.ssh/id_rsa.pub?

A: Pokud chcete použít klíč uložený na jiném místě než výchozí, proveďte tyto dvě úlohy:

  1. Klíče musí být ve složce, kterou můžete číst nebo upravovat jenom vy. Pokud má složka širší oprávnění, SSH klíče nepoužívá.

  2. Musíte dát SSH vědět o umístění klíče, například zadáním identity v konfiguraci SSH:

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

Nastavení IdentitiesOnly yes zajišťuje, že SSH k ověření nepoužívá žádnou jinou dostupnou identitu. Toto nastavení je obzvláště důležité, pokud je k dispozici více než jedna identita.

Otázka: Mám více klíčů SSH. Návody použít správný klíč SSH pro Azure DevOps?

A: Obecně platí, že když pro klienta SSH nakonfigurujete více klíčů, pokusí se klient provést ověření s každým klíčem postupně, dokud server SSH jeden přijme.

Tento přístup ale nefunguje s Azure DevOps kvůli technickým omezením souvisejícím s protokolem SSH a strukturou adres URL Git SSH. Azure DevOps přijímá první klíč poskytnutý klientem během ověřování. Pokud je tento klíč pro požadované úložiště neplatný, požadavek selže bez pokusu o další dostupné klíče, což vede k následující chybě:

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

Pro Azure DevOps musíte nakonfigurovat SSH tak, aby explicitně používal konkrétní soubor klíče. Postup je stejný jako při použití klíče uloženého v nedefaultním umístění. Řekněte SSH, aby pro hostitele Azure DevOps používal správný klíč SSH.

Otázka: Návody používat různé klíče SSH pro různé organizace v Azure DevOps?

A: Azure DevOps blindly přijímá první klíč, který klient poskytuje během ověřování. Pokud je tento klíč pro požadované úložiště neplatný, požadavek selže s následující chybou:

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

Příčinou této chyby je to, že všechny adresy URL Azure DevOps sdílejí stejný název hostitele (ssh.dev.azure.com), takže SSH mezi nimi ve výchozím nastavení nerozlišuje. Konfiguraci SSH ale můžete upravit tak, aby se rozlišovala mezi různými organizacemi tím, že pro každou z nich poskytnete jedinečné klíče. Pomocí aliasů hostitele vytvořte samostatné Host oddíly v konfiguračním souboru SSH.

# 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

Potom místo použití skutečných adres URL řekněte Gitu, že chcete tyto adresy URL použít pro každé úložiště jako vzdálené nahrazením názvu hostitele ve stávajících vzdálených umístěních devops_fabrikam a devops_contoso v uvedeném pořadí. Například git@ssh.dev.azure.com:v3/Fabrikam/Project1/fab_repo by se stal git@devops_fabrikam:v3/Fabrikam/Project1/fab_repo.

Otázka: Jaká oznámení se můžou zobrazovat o klíčích SSH?

A: Pokaždé, když zaregistrujete nový klíč SSH ve službě Azure DevOps Services, obdržíte e-mailové oznámení, které vás informuje o přidání nového klíče SSH do vašeho účtu.

Příklad oznámení SSH

Otázka: Co mám dělat, když věřím, že někdo jiný než já přidává klíče SSH do mého účtu?

A: Pokud obdržíte oznámení o registraci klíče SSH, které jste nezahájili, mohlo by dojít k ohrožení vašich přihlašovacích údajů.

Dalším krokem bude prozkoumání, jestli dojde k ohrožení vašeho hesla. Změna hesla je vždy dobrým prvním krokem k obraně proti tomuto vektoru útoku. Pokud jste uživatelem Microsoft Entra, obraťte se na správce a zkontrolujte, jestli byl váš účet použit z neznámého zdroje nebo umístění.

Otázka: Co mám dělat, když se mi stále zobrazuje výzva k zadání hesla a GIT_SSH_COMMAND="ssh -v" git fetch zobrazení no mutual signature algorithm nebo corresponding algo not in PubkeyAcceptedAlgorithms?

A: Některé linuxové distribuce, jako je Fedora Linux, mají kryptografické zásady, které vyžadují silnější algoritmy podpisů SSH než Azure DevOps (od ledna 2021). K přidání této podpory je potřeba požádat o otevřenou funkci.

Tento problém můžete vyřešit přidáním následujícího kódu do konfigurace SSH (~/.ssh/config):

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

Tip

Pro instance Azure DevOps Serveru a TFS v místním prostředí použijte místo toho odpovídající název hostitele na Host řádku ssh.dev.azure.com vs-ssh.visualstudio.com.