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 shell
také):
- Linux
- macOS
- Systémy Windows s Gitem pro Windows
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.
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.
Vyberte + Nový klíč.
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.
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.
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.
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í!
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.
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
.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 navisualstudio.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.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íží
Otázka: Zobrazuje se upozornění související s ssh-rsa. Co mám dělat?
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\config
ve 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\config
ve 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
Žá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
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:
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á.
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.
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
.