SSH anahtarı kimlik doğrulamasını kullanma


  • Linux
  • en az Leopard çalıştıran macOS (10,5)
  • Windows için Git çalıştıran sistemler Windows

Komut satırını kullanarak SSH yapılandırma. bash, Linux ve macos üzerindeki ortak kabuktur ve Windows yükleme git, Başlat menüsü git bash öğesine bir kısayol ekler. Diğer kabuk ortamları çalışır, ancak bu makalede ele alınmamalıdır.

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

Not

Sisteminizde zaten SSH anahtarları oluşturduysanız, bu adımı atlayın ve SSH anahtarlarını yapılandırmayagidin.

Buradaki komutlar, varolan varsayılan anahtarların üzerine yazarak yeni varsayılan SSH anahtarları oluşturmanızı sağlar. Devam etmeden önce, ~/.ssh klasörünüzü denetleyin (örneğin,/Home/Jamal/.exe veya C:\users\jamal\.exe) ve aşağıdaki dosyaları arayın:

  • id_rsa
  • id_rsa. pub

Bu dosyalar varsa, zaten SSH anahtarları oluşturmuş olursunuz. Aşağıdaki komutlarla anahtarların üzerine yazabilir veya bu adımı atlayabilir ve bu anahtarları yeniden kullanmak için SSH anahtarlarını yapılandırmaya gidebilirsiniz.

İstemdeki komutla SSH anahtarlarınızı oluşturun ssh-keygenbash . Bu komut, SSH ile kullanmak için 3072 bitlik bir RSA anahtarı oluşturur. Sorulduğunda özel anahtarınız için bir parola verebilirsiniz — Bu parola, özel anahtarınız için başka bir güvenlik katmanı sağlar. Bir parola verirseniz, her bağlandığınızda girmeniz gerekmiyorsa SSH aracısını parolanızı önbelleğe almak için yapılandırmayı unutmayın.

$ 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ızın içeriğini hiçbir şekilde paylaşmamak önemlidir. Özel anahtar tehlikeye girerse, saldırganlar bu bağlantıyı kullanarak bağlantının sizin için geldiğini düşünmeye ikna edebilir.

2. adım: ortak anahtarı Azure DevOps Services/tfs 'ye ekleme

Önceki adımda oluşturulan ortak anahtarı Kullanıcı KIMLIĞINIZLE ilişkilendirin.

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

    SSH ortak anahtarları menü öğesini ve Azure DevOps Services seçili kullanıcı Avatar ' i gösteren ekran görüntüsü.

  2. + Yeni anahtar' ı seçin.

    Azure DevOps Services 'de güvenlik yapılandırmasına erişme

  3. Ortak anahtar verileri alanına oluşturduğunuz ortak anahtarın (örneğin, id_rsa. pub) içeriğini kopyalayın.

    Önemli

    anahtar verileri alanına boşluk veya yeni satır eklemekten kaçının, çünkü Azure DevOps Services geçersiz bir ortak anahtar kullanmasına neden olabilir. Anahtara yapıştırırken genellikle sonuna bir yeni satır eklenir. Oluşursa, bu yeni satır ' i kaldırmayı unutmayın.

    Azure DevOps Services ortak anahtar yapılandırılıyor

  4. Daha sonra anımsayabilmeniz için anahtara yararlı bir açıklama verin (Bu açıklama profiliniz için SSH ortak anahtarlar sayfasında görüntülenir). Ortak anahtarı depolamak için Kaydet ' i seçin. Kaydedildikten sonra anahtarı değiştiremezsiniz. Anahtarı silebilir veya başka bir anahtar için yeni bir giriş oluşturabilirsiniz. Kullanıcı profilinize kaç anahtar ekleyebileceğiniz konusunda bir kısıtlama yoktur. ayrıca Azure DevOps içinde depolanan SSH anahtarlarının beş yıl sonra dolacağını unutmayın. anahtarınızın süresi dolarsa, SSH aracılığıyla Azure DevOps erişmeye devam etmek için yeni bir anahtar veya aynı olanı karşıya yükleyebilirsiniz.

  5. Şu komutu çalıştırarak bağlantıyı test edin: ssh -T git@ssh.dev.azure.com . Her şey doğru çalışıyorsa şöyle bir yanıt alırsınız: remote: Shell access is not supported. Aksi takdirde, remote: Shell access is not supported.bölümüne bakın.

2. Adım: ortak anahtarı Azure DevOps ekleyin

Önceki adımda oluşturulan ortak anahtarı Kullanıcı KIMLIĞINIZLE ilişkilendirin.

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

    Azure DevOps Services 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 verileri alanına oluşturduğunuz ortak anahtarın (örneğin, id_rsa. pub) içeriğini kopyalayın.

    Önemli

    anahtar verileri alanına boşluk veya yeni satır eklemekten kaçının, çünkü Azure DevOps Services geçersiz bir ortak anahtar kullanmasına neden olabilir. Anahtara yapıştırırken genellikle sonuna bir yeni satır eklenir. Oluşursa, bu yeni satır ' i kaldırmayı unutmayın.

    Azure DevOps Services ortak anahtar yapılandırılıyor

  4. Daha sonra anımsayabilmeniz için anahtara yararlı bir açıklama verin (Bu açıklama profiliniz için SSH ortak anahtarlar sayfasında görüntülenir). Ortak anahtarı depolamak için Kaydet ' i seçin. Kaydedildikten sonra anahtarı değiştiremezsiniz. Anahtarı silebilir veya başka bir anahtar için yeni bir giriş oluşturabilirsiniz. Kullanıcı profilinize kaç anahtar ekleyebileceğiniz konusunda 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 doğru çalışıyorsa şöyle bir yanıt alırsınız: remote: Shell access is not supported. Aksi takdirde, remote: Shell access is not supported.bölümüne bakın.

3. Adım: Git deposunu SSH ile kopyalama

Not

Mevcut kopyalanmış depolardan SSH ile bağlantı kurmak için bkz. Uzaktan kumandalar IÇIN SSH 'yi güncelleştirme.

  1. Web portalından SSH kopya URL 'sini kopyalayın. Bu örnekte, SSL kopya URL 'si, daha sonra URL 'nin ilk kısmı tarafından belirtildiği gibi, Fabrikam-Fiberadlı bir kuruluştaki bir depo içindir .

    Azure Repos SSH kopyası URL 'si

    Not

    Project url 'leri, Azure DevOps Services sürümü ile değiştirilmiştir ve artık bu biçime sahiptir dev.azure.com/{your organization}/{your project} , ancak yine de var olan biçimi kullanmaya devam edebilirsiniz visualstudio.com . daha fazla bilgi için bkz. Visual Studio Team Services artık Azure DevOps Services.

  2. git cloneKomutunu komut isteminden çalıştırın.

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

SSH, sunucunun SSH parmak izini görüntüleyebilir ve doğrulamanızı ister. Görüntülenen parmak izinin, SSH ortak anahtarları sayfasındaki parmak izlerinden biriyle eşleştiğini doğrulamanız gerekir.

SSH, bu parmak izini, bilinmeyen bir konağa bağlanırken ortadaki adam saldırılarınakarşı korumak için görüntüler. Konağın parmak izini kabul ettikten sonra, parmak izi değişmediği takdirde SSH sizi yeniden istemez.

$ 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 isteyip istemediğiniz sorulduğunda, yazın yes . Git, depoyu kopyalar ve origin sonraki git komutları IÇIN SSH ile bağlantı kurmak üzere uzak ayarı başlatır.

İpucu

sorunları engellemek için, Windows kullanıcıların Git 'in SSH anahtar parolasını yeniden kullanabilmesi için bir komut çalıştırması gerekir.

Sorular ve sorun giderme

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

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

Y : SSH anahtarını şunu çalıştırarak el ile kaydedin:

S: git 'in Windows anahtarımın parolasını hatırlayabilirim?

Y : Windows için Git 'e eklenen aşağıdaki komutu çalıştırarak PowerShell veya Windows komut isteminde işlemi başlatın. ssh-agent , parolanızı önbelleğe alarak, deponuza her bağlanışınızda sağlamanız gerekmez.

start-ssh-agent.cmd

Bash kabuğunu kullanıyorsanız (git Bash dahil), SSH-Agent ' ı ile başlatın:

eval `ssh-agent`

S: bir Putty 'i SSH istemcim olarak kullanıyorum ve kendi anahtarlarımı PuTTYgen ile oluşturmuş iyorum. Bu anahtarları Azure DevOps Services kullanabilir miyim?

Y: Evet. Özel anahtarı PuTTYgen ile yükleyin, dönüşümler 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ı ayarlamakiçin adımları izleyin. Ortak anahtarınızı PuTTYgen penceresinden doğrudan kopyalayın ve güvenlik ayarlarınızdaki anahtar verileri alanına yapıştırın.

S: karşıya yüklenen ortak anahtarın yerel olarak kullandığım anahtarla aynı olduğunu nasıl doğrulayabilirim?

Y : Aşağıdaki komut, komut satırını kullanarak ortak anahtarınıza karşı çalıştırılan ortak anahtarın parmak izini profilinizde gösterildiği gibi doğrulayabilirsiniz bash . Varsayılan değerleri kullanmıyorsanız yolu ve ortak anahtar dosya adını değiştirmeniz gerekir.

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

Daha sonra MD5 imzasını profilinizdeki bir ile karşılaştırabilirsiniz. Bu denetim, bağlantı sorunlarınız varsa veya anahtarı Azure DevOps Services ' a eklerken anahtar verileri alanına yanlış yapıştırma hakkında endişeleriniz varsa yararlıdır.

S: Şu anda HTTPS kullandığım bir depoda SSH 'yi kullanmaya nasıl başlayabilirim?

Y :BIR https 'den SSH URL 'sine geçiş yapmak Için git 'te uzak öğesini güncelleştirmeniz gerekir. SSH kopya URL 'sinesahip olduktan sonra 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 öğesine bağlanan herhangi bir git komutunu çalıştırabilirsiniz origin .

s: git lfs 'yi Azure DevOps Services kullanıyorum ve git lfs tarafından izlenen dosyaları çekdiğimde hata alıyorum.

y : Azure DevOps Services şu anda SSH üzerinden lfs 'yi desteklemez. Git LFS tarafından izlenen dosyalarla birlikte depoya bağlanmak için HTTPS kullanın.

S: varsayılan olmayan bir anahtar konumunu nasıl kullanabilirim, yani ~/. ssh/id_rsa ve ~/nssh/id_rsa. pub?

Y : İle oluşturulan anahtarları varsayılandan farklı bir yerde kullanmak için şu iki görevi gerçekleştirin:

  1. Anahtarların yalnızca sizin okuyabilmeniz veya düzenleyebileceğiniz bir klasörde olması gerekir. Klasörün daha geniş izinleri varsa, SSH bu anahtarları kullanmaz.
  2. SSH 'nin anahtarların konumunu bilmesini sağlamalısınız. ssh-addÖzel anahtarın tam yolunu sağlayarak komut aracılığıyla ANAHTARLARLA SSH ile haberdar olursunuz.
ssh-add /home/jamal/.ssh/id_jamal.rsa

Windows, çalıştırılmadan önce ssh-add , Windows için Git 'e dahil edilen aşağıdaki komutu çalıştırmanız gerekir:

start-ssh-agent.cmd

Bu komut hem PowerShell hem de komut Isteminde çalışır. Git Bash kullanıyorsanız, kullanmanız gereken komut şu şekilde olur:

eval `ssh-agent`

ssh-addWindows dağıtımı için Git 'in bir parçası olarak bulabilir ve Windows üzerinde herhangi bir kabuk ortamında da çalıştırabilirsiniz.

MacOS ve Linux 'ta çalıştırmadan ssh-agent önce çalıştırıyor olmanız gerekir ssh-add , ancak bu platformlardaki komut ortamı genellikle sizin için başlangıç olarak kabul edersiniz ssh-agent .

S: birden çok SSH anahtarım var. Nasıl yaparım? farklı SSH sunucuları veya depoları için farklı SSH anahtarları kullanmak mı istiyorsunuz?

Y : Genellikle, bir SSH istemcisi için birden çok anahtar yapılandırıp bir SSH sunucusuna bağlanıyorsanız, sunucu bir tane kabul edene kadar anahtarları tek seferde deneyebilir.

ancak bu, SSH protokolü ve Git SSH url 'lerimizin yapılandırılması ile ilgili teknik nedenlerle Azure DevOps çalışmaz. Azure DevOps, kimlik doğrulama sırasında istemcinin sağladığı ilk anahtarı benimseme. Bu anahtar, istenen depo için geçersiz ise, istek aşağıdaki hatayla başarısız olur:

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

Azure DevOps için, SSH 'yi belirli bir anahtar dosyasını açıkça kullanacak şekilde yapılandırmanız gerekir. ~/.ssh/configDosyanızı (örneğin, veya) düzenlemek için bunu yapmanın bir yolu /home/jamal/.ssh aşağıdaki gibidir C:\Users\jamal\.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.

# 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: "eşleşen anahtar değişimi yöntemi bulunamadı" hatasını veren hataları giderme Nasıl yaparım??

Y : varsayılan olarak bazı anahtar değişim protokollerini kaldıran yeni bir openssh sürümü ile birlikte gelen Windows 2.25.1 için Git. özellikle, diffie-hellman-group14-sha1 bazı Azure DevOps Server ve TFS müşterileri için sorunlu olarak tanımlanmıştır. Aşağıdaki SSH yapılandırmanıza () ekleyerek soruna geçici bir çözüm bulabilirsiniz ~/.ssh/config :

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

<your-azure-devops-host>Azure DevOps veya TFS sunucunuzun ana bilgisayar adıyla değiştirin tfs.mycompany.com .

S: SSH anahtarlarım hakkında hangi bildirimleri alabilirim?

Y : Azure DevOps Services ile yeni bir ssh anahtarı kaydettiğinizde, hesabınıza yeni bir ssh anahtarı eklendiğini bildiren bir e-posta bildirimi alırsınız.

SSH bildirimi örneği

S: Ben başka birisinin hesabımda SSH anahtarları eklediğimi düşünmem durumunda ne yapmalıyım?

Y : Kaydolmakta olan bir SSH anahtarının bildirimini alırsanız ve hizmete el ile yüklemediğiniz takdirde, kimlik bilgileriniz tehlikede olabilir.

Bir sonraki adım, parolanızın güvenliğinin tehlikeye ılıp aşılmadığını araştırmak için olacaktır. Bu saldırı vektörüne karşı savunmak için Parolanızın değiştirilmesi her zaman iyi bir ilk adımdır. Azure Active Directory bir kullanıcı kullanıyorsanız, hesabınızın bilinmeyen bir kaynak/konumdan mi kullanıldığını denetlemek için yöneticinizle görüşün.

S: parolamı hala isteyip istemediğiniz ne yapmalıyım GIT_SSH_COMMAND="ssh -v" git fetchno mutual signature algorithm ?

Y : fedora linux gibi bazı Linux dağıtımları, Azure DevOps desteklediğinden daha güçlü SSH imza algoritmaları gerektiren şifre ilkelerine sahiptir (ocak 2021 itibariyle). Bu desteği eklemek için açık bir özellik isteği var.

Aşağıdaki kodu SSH yapılandırmanıza () ekleyerek soruna geçici bir çözüm bulabilirsiniz ~/.ssh/config :

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

ssh.dev.azure.comAzure DevOps Server kullanırsanız, doğru ana bilgisayar adıyla değiştirin.

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

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 için Bağlan. Windows, Git Credential Manager Core veya kişisel erişim belirteçlerikullanımını öneririz.

Önemli

SSH URL 'Leri değiştirilmiştir, ancak eski SSH URL 'Leri çalışmaya devam edecektir. Zaten SSH ayarladıysanız, uzak URL 'nizi yeni biçime güncelleştirmeniz gerekir:

  • Git istemciniz üzerinde çalışan hangi uzak makinelerin SSH kullandığını doğrulayın git remote -v .
  • Web 'deki deponuzu ziyaret edin ve sağ üstteki Kopyala düğmesini seçin.
  • SSH ' ı seçin ve yeni SSH URL 'sini kopyalayın.
  • Git istemciniz ' nde şunu çalıştırın: git remote set-url <remote name, e.g. origin> <new SSH URL> . alternatif olarak, Visual Studio ' de depo Ayarlar' a gidin ve uzaktan kumandalar ' ı düzenleyin.

Not

Visual Studio 2017 itibariyle SSH, Azure DevOps Git depolarıyla bağlantı kurmak için kullanılabilir.

SSH anahtarı kimlik doğrulamasının çalışması

SSH ortak anahtar kimlik doğrulaması, asimetrik bir dizi şifreleme anahtarı ile birlikte kullanılabilir. ortak anahtar Azure DevOps paylaşılır ve ilk ssh bağlantısını doğrulamak için kullanılır. Özel anahtar, sisteminizde güvenli ve güvenli tutulur.

SSH anahtarı kimlik doğrulamasını ayarlama

Aşağıdaki adımlarda, aşağıdaki platformlarda SSH anahtarı kimlik doğrulamasının yapılandırması ele alınmaktadır: