SSH anahtarı kimlik doğrulamasını kullanma

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018-TFS 2015

Bağlan https kimlik doğrulaması kullanarak güvenli bir şekilde bağlanmak için macOS, Linux veya Windows SSH aracılığıyla Git depolarınızı ziyaret edin. Bu Windows, Git Kimlik Bilgileri Yöneticisi Core veya Kişisel Erişim Belirteçleri'nin kullanılması önerilir.

Önemli

SSH URL'leri değişti, ancak eski SSH URL'leri çalışmaya devam edecek. SSH'i zaten ayarlamışsanız uzak URL'lerinizi yeni biçime güncelleştirmeniz gerekir:

  • Git istemcisinde çalıştırarak hangi uzakların git remote -v SSH'yi kullanmakta olduğunu doğrulayın.
  • Web'de depoyu ziyaret edin ve sağ üst köşedeki Kopyala düğmesini seçin.
  • SSH'yi seçin ve yeni SSH URL'sini kopyalayın.
  • Git istemcisinde şu çalıştırın: git remote set-url <remote name, e.g. origin> <new SSH URL> . Alternatif olarak, Visual Studio Deposu'Ayarlarve uzak depolarınızı düzenleyin.

Not

2017 Visual Studio SSH, Git depoları ile Azure DevOps için kullanılabilir.

SSH anahtarı kimlik doğrulaması nasıl çalışır?

SSH ortak anahtar kimlik doğrulaması, oluşturulan şifreleme anahtarlarının asimetrik çifti ile çalışır. Ortak anahtar, Azure DevOps SSH bağlantısını doğrulamak için kullanılır. Özel anahtar, sisteminiz üzerinde güvenli ve güvenli bir şekilde tutulur.

SSH anahtarı kimlik doğrulamasını ayarlama

Aşağıdaki adımlar, aşağıdaki platformlarda SSH anahtarı kimlik doğrulamasının yapılandırmasını içerir:


  • Linux
  • en az Leopard çalıştıran macOS (10.5)
  • Windows için Git çalıştıran Windows

Komut satırı kullanarak SSH'yi yapılandırma. bashLinux ve macOS'ta ortak kabuktur ve Windows için Git, linux'ta Git Bash'e bir kısayol Başlat menüsü. Diğer kabuk ortamları çalışır ancak bu makalede ele değildir.

1. Adım: SSH anahtarlarınızı oluşturma

Not

Sisteminiz üzerinde zaten SSH anahtarları oluşturduysanız, bu adımı atlayıp SSH anahtarlarını yapılandırma'ya gidin.

Buradaki komutlar, mevcut varsayılan anahtarların üzerine yazarak yeni varsayılan SSH anahtarları oluşturmanıza izin verir. Devam etmeden önce klasörlerinizi kontrol edin ~/.ssh (örneğin, /home/jamal/.ssh veya C:\Users\jamal .ssh) ve aşağıdaki \ dosyaları bakın:

  • id_rsa
  • id_rsa.pub

Bu dosyalar varsa, SSH anahtarlarını zaten oluşturulmuş olur. Aşağıdaki komutlarla anahtarların üzerine yazabilirsiniz veya bu adımı atlayıp SSH anahtarlarını bu anahtarları yeniden kullanmak üzere yapılandırmaya gidebilirsiniz.

İstendiğinde komutuyla SSH ssh-keygen anahtarlarınızı bash oluşturun. Bu komut, SSH ile kullanmak üzere 3072 bit RSA anahtarı oluşturacak. Bu parola istendiğinde özel anahtarınız için bir parola ve sonra özel anahtarınız için başka — bir güvenlik katmanı sabilirsiniz. Bir parola belirtirsiniz, her bağlanıldığında girmek zorunda olmadığınız için SSH aracınızı parolanızı önbelleğe alan şekilde yapılandırıldığından emin olun.

$ ssh-keygen -C "jamal@fabrikam.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/jamal/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/jamal/.ssh/id_rsa.
Your public key has been saved in /c/Users/jamal/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:******************************************* jamal@fabrikam.com
The key's randomart image is:
+---[RSA 3072]----+
|+.   +yX*o .     |
|... ..E+*=o      |
|  ..o.=E=.o      |
|   . * =.o .     |
|    . S o o..    |
|       + .oo     |
|        S+.  .   |
|        ..+.+    |
|          o*..   |
+----[SHA256]-----+

Bu komut, SSH kimlik doğrulaması için gereken iki anahtarı üretir: özel anahtarınız ( id_rsa ) ve ortak anahtar ( id_rsa.pub ). Özel anahtarın içeriğini hiçbir zaman paylaşmamanız önemlidir. Özel anahtarın güvenliği ihlal edilmişse, saldırganlar bu anahtarı kullanarak sunucuları bağlantının size geldiğini düşünmeleri için kandırabilirsiniz.

2. Adım: ortak anahtarı Azure DevOps Services/TFS'ye ekleme

Önceki adımda oluşturulan ortak anahtarı kullanıcı kimliğinizle ilişkilendirme.

  1. Web portalına göz atarak ve kullanıcı arabiriminin sağ üst köşesinden avatarınızı seçerek güvenlik ayarlarınızı açın. Görüntülenen menüdeNSSH ortak anahtarları'ı seçin.

    SSH ortak anahtarları menü öğesini ve seçilen kullanıcı avatarı öğesini gösteren ekran Azure DevOps Services.

  2. + Yeni Anahtar'ı seçin.

    Azure DevOps Services'de Güvenlik Yapılandırmasına Erişme

  3. Ortak anahtar (örneğin, id_rsa.pub) içeriğini Ortak Anahtar Verileri alanına kopyalayın.

    Önemli

    Anahtar Verileri alanına boşluk veya yeni satırlar eklemekten kaçının çünkü bu satırlar Azure DevOps Services ortak anahtar kullanmalarına neden olabilir. Anahtarı yapıştırıyorken genellikle sonuna yeni bir satır eklenir. Bu yeni satır oluşursa kaldırsanız emin olun.

    Azure DevOps Services'da Ortak Anahtarı yapılandırma

  4. Anahtarın yararlı bir açıklamasını (bu açıklama profilinizin SSH ortak anahtarları sayfasında görüntülenir) daha sonra anımsayabilirsiniz. Ortak anahtarı depolamak için Kaydet'i seçin. Kaydedildiktan sonra anahtarı değiştiremezsiniz. Anahtarı silebilir veya başka bir anahtar için yeni bir giriş oluşturabilirsiniz. Kullanıcı profilinize kaç anahtar ekleyebilirsiniz? ile ilgili bir kısıtlama yoktur. Ayrıca, içinde depolanan SSH anahtarlarının beş Azure DevOps sonra sona erer. Anahtarın süresi dolsa, SSH aracılığıyla anahtara erişmeye devam etmek için yeni bir Azure DevOps veya aynı anahtarı karşıya yükleyebilirsiniz.

  5. Şu komutu çalıştırarak bağlantıyı test edin: ssh -T git@ssh.dev.azure.com . Her şey düzgün şekilde çalışıyorsa şu yanıtı alırsınız: Çalışmıyorsa, Sorular ve sorun remote: Shell access is not supported. giderme bölümüne bakın.

2. Adım: Ortak anahtarı Azure DevOps

Önceki adımda oluşturulan ortak anahtarı kullanıcı kimliğinizle ilişkilendirme.

  1. Web portalına göz atarak ve kullanıcı arabiriminin sağ üst köşesinden avatarınızı seçerek güvenlik ayarlarınızı açın. Görüntülenen menüde Güvenlik'i seçin.

    Azure DevOps Services'de Kullanıcı Profiline Erişme

  2. + Yeni Anahtar'ı seçin.

    Azure DevOps Services'de Güvenlik Yapılandırmasına Erişme

  3. Ortak anahtar (örneğin, id_rsa.pub) içeriğini Ortak Anahtar Verileri alanına kopyalayın.

    Önemli

    Anahtar Verileri alanına boşluk veya yeni satırlar eklemekten kaçının çünkü bu satırlar Azure DevOps Services ortak anahtar kullanmalarına neden olabilir. Anahtarı yapıştırıyorken genellikle sonuna yeni bir satır eklenir. Bu yeni satır oluşursa kaldırsanız emin olun.

    Azure DevOps Services'da Ortak Anahtarı yapılandırma

  4. Anahtarın yararlı bir açıklamasını (bu açıklama profilinizin SSH ortak anahtarları sayfasında görüntülenir) daha sonra anımsayabilirsiniz. Ortak anahtarı depolamak için Kaydet'i seçin. Kaydedildiktan sonra anahtarı değiştiremezsiniz. Anahtarı silebilir veya başka bir anahtar için yeni bir giriş oluşturabilirsiniz. Kullanıcı profilinize kaç anahtar ekleyebilirsiniz? ile ilgili bir kısıtlama yoktur.

  5. Şu komutu çalıştırarak bağlantıyı test edin: ssh -T git@ssh.dev.azure.com . Her şey düzgün şekilde çalışıyorsa şu yanıtı alırsınız: Çalışmıyorsa, Sorular ve sorun remote: Shell access is not supported. giderme bölümüne bakın.

3. Adım: Git deposunu SSH ile kopyalama

Not

Mevcut kopyalanmış bir repodan SSH'ye bağlanmak için bkz. Uzak cihazlarınızı SSH'ye güncelleştirme.

  1. Web portalında SSH kopyalama URL'sini kopyalayın. Bu örnekte SSL kopyası URL'si, url'nin sonrasındaki ilk bölümüyle belirtilen fabrikam-fiber adlı kuruluşta bulunan bir repo için dev.azure.com dır.

    Azure Repos SSH Kopyalama URL'si

    Not

    Project url 'ler Azure DevOps Services yayınmasıyla değiştirilmiştir ve şimdi biçimi vardır dev.azure.com/{your organization}/{your project} , ancak yine de varolan visualstudio.com biçimi kullanabilirsiniz. daha fazla bilgi için bkz. Visual Studio Team Services artık Azure DevOps Services.

  2. Komut git clone isteminden komutunu çalıştırın.

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

SSH, sunucunun SSH parmak izini görüntüp doğrulamayı sorabilir. Görüntülenen parmak izinin SSH ortak anahtarları sayfasındaki parmak izinden biri ile eşle eş olduğunu doğrulamanız gerekir.

SSH, sizi ortadaki adam saldırılarına karşı korumak için bilinmeyen bir ana bilgisayara bağlandığında bu parmak izini görüntüler. Ana bilgisayar parmak izini kabul edersiniz, parmak izi değişirse SSH sizden bir daha istem etmez.

$ git clone git@ssh.dev.azure.com:v3/fabrikam-fiber/FabrikamFiber/FabrikamFiber
Cloning into 'FabrikamFiber'...
The authenticity of host 'ssh.dev.azure.com (65.52.8.37)' can't be established.
RSA key fingerprint is SHA256:********************************************
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ssh.dev.azure.com,65.52.8.37' (RSA) to the list of known hosts.
Enter passphrase for key '/c/Users/jamal/.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.

Bağlanmaya devam etmek istediğiniz sorulsa yes yazın. Git, depoya kopyalar ve gelecekteki origin Git komutları için SSH ile bağlanmak için uzak depo ayarlayın.

İpucu

Sorunları önlemek için Windows git'in SSH anahtar parolalarını yeniden kullanmasını istediğiniz bir komut çalıştırmalıdır.

Sorular ve sorun giderme

S: git clone çalıştırıldıktan sonra aşağıdaki hatayı alıyorum. Ne yapmalıyım?

Host key verification failed. 
fatal: Could not read from remote repository.

A: Aşağıdakini çalıştırarak SSH anahtarını el ile kaydetme: ssh-keyscan -t rsa domain.com >> ~/.ssh/known_hosts

S: Git'in anahtar anahtarım için parolayı nasıl hatırlaması Windows?

A: PowerShell'de veya Komut İstemi'Windows başlatmak için Git'te bulunan ssh-agent Windows çalıştırın. ssh-agent parolanızı önbelleğe alır, bu nedenle depoya her bağlanabilirsiniz.

start-ssh-agent.cmd

Bash kabuğunu (Git Bash dahil) kullanıyorsanız ssh-agent'ı şu şekilde başlat:

eval `ssh-agent`

S: SSH istemcim olarak PuTTY'yi kullandım ve PuTTYgen ile anahtarlarımı oluşturmuşum. Bu anahtarları Azure DevOps Services?

Y: Evet. PuTTYgen ile özel anahtarı yükleme, Dönüştürmeler menüsüne gidin ve OpenSSH anahtarını dışarı aktar'ı seçin. Özel anahtar dosyasını kaydedin ve ardından varsayılan olmayan anahtarları ayarlamak için adımları izleyin. Ortak anahtarınızı doğrudan PuTTYgen penceresinden kopyalayın ve güvenlik ayarlarınıza Anahtar Verileri alanına yapıştırın.

S: Karşıya yükleyişim ortak anahtarın yerel olarak sahip olduğum anahtarla aynı olduğunu nasıl doğru bilmiyorum?

A: Ortak anahtarın parmak izini, aşağıdaki komut komutuyla profilinizde görüntülenenle karşıya yükleyen ortak anahtarın parmak izini, komut satırı kullanarak ortak ssh-keygen anahtarınıza karşı bash çalıştırarak doğruabilirsiniz. Varsayılan değerleri kullanamıyorsanız yolu ve ortak anahtar dosya adını değiştirebilirsiniz.

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

Ardından MD5 imzasını profilinizde yer alan imzayla karşılaştırabilirsiniz. Bu denetim, bağlantı sorunlarınız varsa veya anahtarı Anahtar Verileri alanına eklerken ortak anahtarı hatalı bir şekilde yapıştırarak ilgili endişeleriniz varsa Azure DevOps Services.

S: Şu anda HTTPS'yi kullanmakta olduğum depoda SSH kullanmaya nasıl başlayabilirim?

A: HTTPS'den origin SSH URL'sini değiştirmek için Git'te uzak depo güncelleştirmeniz gerekir. SSH kopya URL'sini edinsonra aşağıdaki komutu çalıştırın:

git remote set-url origin git@ssh.dev.azure.com:v3/fabrikam-fiber/FabrikamFiber/FabrikamFiber

Artık komutuna bağlanan herhangi bir Git komutunu origin çalıştırabilirsiniz.

S: Git LFS'yi Azure DevOps Services ve Git LFS tarafından izlenen dosyaları çekme sırasında hatalarla ilgiliyim.

A: Azure DevOps Services şu anda SSH üzerinden LFS'i desteklemez. Git LFS tarafından İzilen dosyalarla depolara bağlanmak için HTTPS kullanın.

S: Varsayılan olmayan bir anahtar konumunu (~/.ssh/id_rsa ve ~/.ssh/id_rsa.pub değil) nasıl kullanabilirim?

A: ile oluşturulan anahtarları ssh-keygen varsayılandan farklı bir yerde kullanmak için şu iki görevi gerçekleştirin:

  1. Anahtarlar, yalnızca sizin okuyabilen veya düzenley okuyabilen bir klasörde yer alsun. Klasör daha geniş izinlere sahipse SSH anahtarları kullanmaz.
  2. Anahtarların konumunu SSH'ye haber verebilirsiniz. Özel anahtarın tam yolunu sağlayan ssh-add komutuyla SSH'nin anahtarları fark edersiniz.
ssh-add /home/jamal/.ssh/id_jamal.rsa

Bu Windows, çalıştırmadan önce, aşağıdaki komutu Git'te bulunan komutu ssh-add Windows:

start-ssh-agent.cmd

Bu komut hem PowerShell'de hem de Komut İstemsinde çalışır. Git Bash kullanıyorsanız, komutunuz şu şekildedir:

eval `ssh-agent`

Dağıtım için Git'in bir Windows olarak bulabilir ve aynı zamanda bu dağıtımı tüm ssh-add ortamlar üzerinde herhangi bir kabuk ortamında Windows.

macOS ve Linux'ta çalıştırmadan önce de çalıştırmalısınız, ancak bu platformlarda komut ortamı ssh-agent ssh-add genellikle sizin için ssh-agent başlangıçla ilgilenmektedir.

S: Birden çok SSH anahtarım var. Nasıl yaparım? SSH sunucuları veya repoları için farklı SSH anahtarları mı kullanasınız?

A: Genel olarak, bir SSH istemcisi için birden çok anahtar yapılandırıyor ve bir SSH sunucusuna bağlanıyorsanız, sunucu bir anahtar kabul edene kadar istemci anahtarları tek tek deneyebilir.

Ancak bu, SSH protokolüyle Azure DevOps ve Git SSH URL'lerimizin nasıl yapılandırıldıklarına ilişkin teknik nedenlerle bu durumla birlikte çalışmaz. Azure DevOps, istemcinin kimlik doğrulaması sırasında sağladığı ilk anahtarı kör bir şekilde kabul eder. İstenen repo için bu anahtar geçersizse, istek aşağıdaki hatayla başarısız olur:

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

Daha Azure DevOps için SSH'yi belirli bir anahtar dosyasını açıkça kullanmak üzere yapılandırmanız gerekir. Dosyanızı (örneğin, veya ~/.ssh/config ) aşağıdaki gibi düzenlemek için bunu yapmak için bir /home/jamal/.ssh C:\Users\jamal\.ssh yol:

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

# Most common scenario: to use the same key across all hosted Azure DevOps
# organizations, add a Host entry like this:
Host ssh.dev.azure.com
  IdentityFile ~/.ssh/your_private_key
  IdentitiesOnly yes

# This model will also work if you still use the older SSH URLs with a
# hostname of vs-ssh.visualstudio.com:
Host vs-ssh.visualstudio.com
  IdentityFile ~/.ssh/your_private_key
  IdentitiesOnly yes

# Less common scenario: if you need different keys for different organizations,
# you'll need to use host aliases to create separate Host sections.
# This is because all hosted Azure DevOps URLs have the same hostname
# (ssh.dev.azure.com), so SSH has no way to distinguish them by default.
#
# 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
#
# Then, instead of using the real URLs, tell Git you want to use these URLs:
# * git@devops_fabrikam:v3/Fabrikam/Project1/fab_repo
# * git@devops_contoso:v3/Contoso/Project2/con_repo
#

# At the end of the file, you can put global defaults for other SSH hosts you
# may connect to.  Note that "*" also matches any hosts that match the sections
# above, and remember that SSH uses the first matching line for each parameter name.
Host *
# 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.

# Say your on-premises Azure DevOps Server instance has SSH URLs like this:
#   ssh://someHost:22/someCollection/some_project/_git/some_repo
# Add the following Host section:
Host someHost
  IdentityFile ~/.ssh/your_private_key
  IdentitiesOnly yes

# At the end of the file, you can put global defaults for other SSH hosts you
# may connect to.  Note that "*" also matches any hosts that match the sections
# above, and remember that SSH uses the first matching line for each parameter name.
Host *

S: Nasıl yaparım? değiştirme yöntemi bulunamadı" hatalarına neden olan hataları düzeltebilirsiniz.

A: Windows 2.25.1 için Git, openSSH'nin bazı anahtar değişim protokollerini varsayılan olarak kaldıran yeni bir sürümüyle birlikte gönderildi. Özellikle, diffie-hellman-group14-sha1 bazı şirket ve TFS müşterileri için Azure DevOps Server olarak belirlendi. SSH yapılandırmanıza () aşağıdakini ekleyerek soruna çözüm bu soruna çözüm bu ~/.ssh/config yapabilirsiniz:

Host <your-azure-devops-host>
    KexAlgorithms +diffie-hellman-group14-sha1

yerine <your-azure-devops-host> Azure DevOps veya TFS sunucusunun ana bilgisayar adını yazın. tfs.mycompany.com

S: SSH anahtarlarım hakkında hangi bildirimleri alamıyorum?

A: Azure DevOps Services ile yeni bir SSH Anahtarı Azure DevOps Services, hesabınıza yeni bir SSH anahtarı eklenmiştir.

SSH bildirimi örneği

S: Hesabıma benim dışında birinin SSH anahtarları ekley olduğuna inanıyor olursam ne yapabilirim?

A: Kayıtlı olan bir SSH anahtarının bildirimini alırsanız ve bunu hizmete el ile yüklemezsiniz, kimlik bilgileriniz tehlikeye girebilir.

Sonraki adım, parolanızın tehlikeye atılmış olup olmadığını araştırmaktır. Parolanızı değiştirmek, bu saldırı vektörüne karşı savunma yapmak için her zaman iyi bir ilk adımdır. Yeni bir kullanıcı Azure Active Directory yöneticinizle konuşarak hesabınız bilinmeyen bir kaynaktan/konumdan mı kullanılmış olduğunu kontrol edin.

S: Parolam istendiğinde ve gösteriyorsa ne GIT_SSH_COMMAND="ssh -v" git fetch no mutual signature algorithm yapabilirim?

A: Fedora Linux gibi bazı Linux dağıtımları, Azure DevOps daha güçlü SSH imza algoritmaları gerektiren şifreleme ilkelerine sahip (Ocak 2021'den itibaren). Bu desteği eklemek için açık bir özellik isteği var.

SSH yapılandırmanıza ( ) aşağıdaki kodu ekleyerek bu soruna bir son ve ardından ~/.ssh/config bakabilirsiniz:

Host ssh.dev.azure.com
  PubkeyAcceptedKeyTypes=ssh-rsa

yerine ssh.dev.azure.com doğru ana bilgisayar adını yazın ve Azure DevOps Server.