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

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

Prostřednictvím SSH v systémech macOS, Linux nebo Windows se můžete připojit k úložištím Git, abyste se mohli bezpečně připojit pomocí ověřování HTTPS.

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é):

Poznámka:

Od sady Visual Studio 2017 se dá SSH použít k připojení k úložištím Azure DevOps Git.

Tip

Ve Windows doporučujeme používat Správce přihlašovacích údajů Gitu nebo osobní přístupové tokeny.

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

Poznámka:

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

Pokud chcete vygenerovat soubory klíčů pomocí algoritmu RSA, spusťte následující příkaz z PowerShellu nebo jiného prostředí, jako bash je váš klient:

ssh-keygen

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

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 tomto okamžiku se zobrazí výzva k šifrování souborů privátního klíče pomocí přístupového hesla. 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 přehledu se v horní části zobrazí poznámka obsahující otisky prstů serveru. Poznamenejte si je, protože se budou vyžadovat 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 jedná o první připojení, 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 daný otisk prstu s otisky prstů nabízenými na výše uvedené stránce nastavení. Pokračujte pouze v případě, že se shodují!

    Pokud je vše správně nakonfigurované, měl by výstup vypadat takto:

    remote: Shell access is not supported.
    

    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
    

    Než budete moct pokračovat, měli byste být vyzváni k zadání hesla pro klíč SSH, dokud ho nespravuje agent SSH:

    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 . Další problémy najdete v části Otázky 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: Mohou 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.

Dříve jste možná změnili konfiguraci SSH tak, aby downgradovali nastavení zabezpečení pro Azure DevOps přidáním následujícího souboru ~/.ssh/config (%UserProfile%\.ssh\config ve Windows):

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

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

Další podrobnosti najdete v 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ého 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.
    

    Dříve jste možná změnili konfiguraci SSH tak, aby downgradovali nastavení zabezpečení pro Azure DevOps přidáním následujícího souboru ~/.ssh/config (%UserProfile%\.ssh\config ve Windows):

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

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

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

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

    K tomu by nemělo dojít ani 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: K tomu 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í PuTTYgen, 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í jiných než výchozí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, budete muset změnit cestu a název souboru veřejného klíče.

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

Podpis MD5 pak můžete porovnat s podpisem MD5 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: Abyste mohli přejít z adresy URL HTTPS na adresu URL SSH, budete muset 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, které přistupují ke vzdálenému volalu origin , teď budou používat 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 jiné než výchozí umístění klíče, tedy 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 nebude používat.

  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
    

Toto IdentitiesOnly yes nastavení zajistí, aby SSH k ověření nepoužít žádnou jinou dostupnou identitu. To je důležité zejména v případě, že 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 pokud pro klienta SSH nakonfigurujete více klíčů a připojíte se k serveru SSH, klient může klíče vyzkoušet postupně, dokud ho server přijme.

To ale nefunguje s Azure DevOps z technických důvodů souvisejících s protokolem SSH a strukturou adres URL SSH Gitu. Azure DevOps přijme první klíč, který klient během ověřování poskytuje. Pokud je tento klíč pro požadované úložiště neplatný, požadavek selže bez pokusu o další dostupné klíče z důvodu následující chyby:

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

Pro Azure DevOps budete muset 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 jiné než výchozí umístění. Jednoduše řekněte SSH, aby pro hostitele Azure DevOps použil 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 bude nevidomě přijímat 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.

Konfiguraci SSH ale můžete upravit tak, aby se odlišily mezi různými organizacemi a poskytovaly pro každou z nich různé klíče. K tomu budete muset použít aliasy hostitelů k vytvoření samostatných Host oddílů v konfiguraci SSH. Důvodem je to, že všechny hostované adresy URL Azure DevOps mají stejný název hostitele (ssh.dev.azure.com), takže SSH ve výchozím nastavení nemá žádný způsob, jak je odlišit.

# 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í s oznámením, že se do vašeho účtu přidal nový klíč SSH.

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?

Odpověď: Pokud obdržíte oznámení o zaregistrovaném klíči SSH a nenahráli jste ho ručně do služby, mohlo dojít k ohrožení vašich přihlašovacích údajů.

Dalším krokem by bylo zjistit, jestli nedošlo 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.