Menggunakan autentikasi kunci SSH

Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

Anda dapat menyambungkan ke repositori Git Anda melalui SSH di macOS, Linux, atau Windows untuk tersambung dengan aman menggunakan autentikasi HTTPS.

Penting

URL SSH telah berubah, tetapi URL SSH lama terus berfungsi. Jika Anda sudah menyiapkan SSH, perbarui URL jarak jauh Anda ke format baru:

URL SSH terbaru dimulai dengan ssh.dev.azure.com. URL sebelumnya menggunakan vs-ssh.visualstudio.com.

  • Verifikasi remote mana yang menggunakan SSH. Jalankan git remote -v di shell Anda atau gunakan klien GUI sebagai gantinya.
  • Kunjungi repositori Anda di web dan pilih Kloning.
  • Pilih SSH dan salin URL SSH baru.
  • Di shell Anda, jalankan git remote set-url <remote name> <new SSH URL> untuk setiap remote repositori yang ingin Anda perbarui. Atau, gunakan klien GUI untuk memperbarui URL jarak jauh.

Cara kerja autentikasi kunci SSH

Autentikasi kunci publik SSH berfungsi dengan sepasang asimetris kunci enkripsi yang dihasilkan. Kunci publik dibagikan dengan Azure DevOps dan digunakan untuk memverifikasi koneksi ssh awal. Kunci privat tetap aman dan aman pada sistem Anda.

Menyiapkan autentikasi kunci SSH

Langkah-langkah berikut mencakup konfigurasi autentikasi kunci SSH pada platform berikut menggunakan baris perintah (juga disebut shell):

Catatan

Pada Visual Studio 2017, SSH dapat digunakan untuk menyambungkan ke repositori Azure DevOps Git.

Tip

Di Windows, kami merekomendasikan penggunaan Git Credential Manager atau Token Akses Pribadi.

Langkah 1: Buat kunci SSH Anda

Catatan

Jika Anda telah membuat kunci RSA SSH pada sistem Anda, lewati langkah ini dan konfigurasikan kunci SSH Anda. Untuk memverifikasi ini, buka direktori beranda Anda dan lihat .ssh folder (%UserProfile%\.ssh\ di Windows atau ~/.ssh/ di Linux, macOS, dan Windows dengan Git Bash). Jika Anda melihat dua file bernama id_rsa dan id_rsa.pub masing-masing melanjutkan dengan mengonfigurasi kunci SSH Anda.

Untuk menggunakan autentikasi berbasis kunci, Anda harus terlebih dahulu menghasilkan pasangan kunci publik/privat untuk klien Anda. ssh-keygen.exe digunakan untuk menghasilkan file kunci dan algoritma DSA, RSA, ECDSA, atau Ed25519 dapat ditentukan. Jika tidak ada algoritma yang ditentukan, RSA digunakan.

Catatan

Satu-satunya jenis kunci SSH yang didukung oleh Azure DevOps adalah RSA.

Untuk menghasilkan file kunci menggunakan algoritma RSA, jalankan perintah berikut dari PowerShell atau shell lain seperti bash pada klien Anda:

ssh-keygen

Output dari perintah harus menampilkan output berikut (di mana username digantikan oleh nama pengguna Anda):

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

Anda dapat menekan Enter untuk menerima default, atau menentukan jalur dan/atau nama file tempat Anda ingin kunci Anda dibuat. Pada titik ini, Anda akan diminta untuk menggunakan frasa sandi untuk mengenkripsi file kunci privat Anda. Frase sandi bisa kosong tetapi tidak disarankan. Frase sandi berfungsi dengan file kunci untuk menyediakan autentikasi dua faktor.

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

Sekarang Anda memiliki pasangan kunci rsa publik/privat di lokasi yang ditentukan. File .pub adalah kunci publik, dan file tanpa ekstensi adalah kunci privat:

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

Penting

Jangan pernah membagikan konten kunci privat Anda. Jika kunci privat disusupi, penyerang dapat menggunakannya untuk mengelabui server agar berpikir koneksi berasal dari Anda. File kunci privat setara dengan kata sandi dan harus dilindungi dengan cara yang sama.

Langkah 2: Tambahkan kunci publik ke Azure DevOps

Kaitkan kunci publik yang dihasilkan pada langkah sebelumnya dengan ID pengguna Anda.

Catatan

Anda harus mengulangi operasi ini untuk setiap organisasi yang dapat Anda akses dan ingin menggunakan SSH.

  1. Buka pengaturan keamanan Anda dengan menelusuri portal web dan memilih ikon di samping avatar di kanan atas antarmuka pengguna. Pilih kunci publik SSH di menu yang muncul.

    Cuplikan layar yang memperlihatkan item menu kunci publik SSH dan avatar pengguna yang dipilih di Azure DevOps.

  2. Pilih + Kunci Baru.

    Cuplikan layar memperlihatkan akses ke Konfigurasi Keamanan di Azure DevOps.

  3. Salin konten kunci publik (misalnya, id_rsa.pub) yang Anda buat ke bidang Data Kunci Publik.

    Penting

    Hindari menambahkan spasi kosong atau baris baru ke bidang Data Kunci, karena dapat menyebabkan Azure DevOps menggunakan kunci publik yang tidak valid. Saat menempelkan kunci, baris baru sering ditambahkan di akhir. Pastikan untuk menghapus baris baru ini jika terjadi.

    Cuplikan layar memperlihatkan mengonfigurasi Kunci Umum di Azure DevOps.

  4. Berikan deskripsi yang berguna pada kunci (deskripsi ini ditampilkan di halaman kunci publik SSH untuk profil Anda) sehingga Anda dapat mengingatnya nanti. Pilih Simpan untuk menyimpan kunci publik. Setelah disimpan, Anda tidak dapat mengubah kunci. Anda dapat menghapus kunci atau membuat entri baru untuk kunci lain. Tidak ada batasan berapa banyak kunci yang dapat Anda tambahkan ke profil pengguna Anda. Perhatikan juga bahwa kunci SSH yang disimpan di Azure DevOps kedaluwarsa setelah satu tahun. Jika kunci Anda kedaluwarsa, Anda dapat mengunggah kunci baru atau kunci yang sama untuk terus mengakses Azure DevOps melalui SSH.

  5. Pada halaman gambaran umum, catatan ditampilkan di bagian atas yang berisi sidik jari server. Catat karena akan diperlukan saat Anda pertama kali terhubung ke Azure DevOps melalui SSH.

    Cuplikan layar mengakses konfigurasi keamanan di Azure DevOps Services.

  6. Uji koneksi dengan menjalankan perintah berikut:

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

    Jika ini pertama kalinya Anda menyambungkan, Anda harus menerima output berikut:

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

    Bandingkan sidik jari yang diberikan dengan sidik jari yang ditawarkan di halaman pengaturan tersebut. Lanjutkan hanya jika cocok!

    Jika semuanya dikonfigurasi dengan benar, output akan terlihat seperti ini:

    remote: Shell access is not supported.
    

    Jika tidak, lihat bagian tentang Pertanyaan dan pemecahan masalah.

Langkah 3: Kloning repositori Git dengan SSH

Catatan

Untuk menggunakan SSH dengan repositori yang sebelumnya dikloning melalui HTTPS, lihat memperbarui remote Anda ke SSH.

  1. Salin URL kloning SSH dari portal web. Dalam contoh ini, URL klon SSH adalah untuk repositori dalam organisasi bernama fabrikam-fiber, seperti yang ditunjukkan oleh bagian pertama URL setelah dev.azure.com.

    Cuplikan layar memperlihatkan URL kloning Azure Repos SSH

    Catatan

    Dengan Azure DevOps Services, format untuk URL proyek adalah dev.azure.com/{your organization}/{your project}. Namun, format sebelumnya yang mereferensikan visualstudio.com format masih didukung. Untuk informasi selengkapnya, lihat Memperkenalkan Azure DevOps, Beralih organisasi yang sudah ada untuk menggunakan URL nama domain baru.

  2. Jalankan git clone dari perintah.

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

    Anda sekarang harus diminta untuk memasukkan frasa sandi untuk kunci SSH Anda sebelum Anda dapat melanjutkan kecuali dikelola oleh Agen 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.
    

    Jika Anda diminta untuk memverifikasi sidik jari, silakan baca Langkah 2: Tambahkan kunci publik ke Azure DevOps lagi. Untuk masalah lain, baca bagian tentang Pertanyaan dan pemecahan masalah.

Tip

Untuk memanfaatkan SSH secara maksimal, umumnya menggunakan Agen SSH untuk mengelola kunci SSH Anda. Menyiapkan agen berada di luar cakupan artikel ini.

Pertanyaan dan pemecahan masalah

A: Ada dua pesan peringatan berbeda yang mungkin Anda lihat:

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.

or

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.

Anda mungkin sebelumnya telah memodifikasi konfigurasi SSH untuk menurunkan tingkat pengaturan keamanan Untuk Azure DevOps dengan menambahkan yang berikut ini ke file Anda ~/.ssh/config (%UserProfile%\.ssh\config di Windows):

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

Hapus baris ini sekarang dan pastikan rsa-sha2-256 dan/atau rsa-sha2-512 diizinkan.

Untuk detail selengkapnya, lihat posting blog.

T: SSH tidak dapat membuat koneksi. Apa yang harus saya lakukan?

A: Ada beberapa masalah berbeda yang mungkin Anda alami:

  • Penggunaan SSH-RSA yang tidak didukung

    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.
    

    Anda mungkin sebelumnya telah memodifikasi konfigurasi SSH untuk menurunkan tingkat pengaturan keamanan Untuk Azure DevOps dengan menambahkan yang berikut ini ke file Anda ~/.ssh/config (%UserProfile%\.ssh\config di Windows):

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

    Hapus baris ini sekarang dan pastikan rsa-sha2-256 dan/atau rsa-sha2-512 diizinkan.

    Untuk detail selengkapnya, lihat posting blog.

  • Tidak ada kunci host yang cocok

    Ini seharusnya tidak terjadi di Azure DevOps Service atau pada versi Azure DevOps Server yang lebih baru seperti yang disebutkan dalam posting blog.

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

    Ubah konfigurasi SSH Anda untuk menurunkan tingkat pengaturan keamanan Untuk Azure DevOps dengan menambahkan hal berikut ke ~/.ssh/config file (%UserProfile%\.ssh\config di Windows):

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

    Penting

    OpenSSH menghentikan ssh-rsa algoritma tanda tangan kunci publik di versi 8.2 dan menonaktifkannya secara default di versi 8.8.

  • Tidak ada MAC yang cocok

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

    Ubah konfigurasi SSH Anda untuk menurunkan tingkat pengaturan keamanan Untuk Azure DevOps dengan menambahkan hal berikut ke ~/.ssh/config file (%UserProfile%\.ssh\config di Windows):

    Host ssh.dev.azure.com vs-ssh.visualstudio.com
       MACs +hmac-sha2-512,+hmac-sha2-256
    
  • Tidak ada metode pertukaran kunci yang cocok

    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
    

    Ubah konfigurasi SSH Anda untuk menurunkan tingkat pengaturan keamanan Untuk Azure DevOps dengan menambahkan hal berikut ke ~/.ssh/config file (%UserProfile%\.ssh\config di Windows):

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

    Penting

    Algoritma diffie-hellman-group1-sha1 pertukaran kunci telah dinonaktifkan secara default di OpenSSH versi 6.9 dan diffie-hellman-group14-sha1 di versi 8.2.

Tip

Untuk instans Azure DevOps Server dan TFS yang dihost sendiri, gunakan nama host yang sesuai di Host baris, bukan ssh.dev.azure.com vs-ssh.visualstudio.com.

T: Bagaimana cara meminta Git mengingat frasa sandi untuk kunci saya?

A: Anda dapat menggunakan Agen SSH untuk itu. Linux, macOS, dan Windows (dimulai dengan Windows 10 (build 1809) atau dengan menggunakan Git untuk Windows dengan Git Bash) semuanya dikirim dengan Agen SSH. Agen SSH dapat digunakan untuk menyimpan kunci SSH Anda untuk penggunaan berulang. Silakan lihat manual vendor SSH Anda untuk detail tentang cara menggunakannya.

T: Saya menggunakan PuTTY sebagai klien SSH saya dan menghasilkan kunci saya dengan PuTTYgen. Dapatkah saya menggunakan kunci ini dengan Azure DevOps Services?

J: Ya. Muat kunci privat dengan PuTTYgen, buka menu Konversi dan pilih Ekspor kunci OpenSSH. Simpan file kunci privat lalu ikuti langkah-langkah untuk menyiapkan kunci non-default. Salin kunci publik Anda langsung dari jendela PuTTYgen dan tempelkan ke bidang Data Kunci di pengaturan keamanan Anda.

T: Bagaimana cara memverifikasi bahwa kunci publik yang saya unggah adalah kunci yang sama dengan kunci lokal saya?

A: Anda dapat memverifikasi sidik jari kunci publik yang diunggah dengan yang ditampilkan di profil Anda melalui perintah berikut yang ssh-keygen dijalankan terhadap kunci publik Anda menggunakan baris perintah. Anda harus mengubah jalur dan nama file kunci publik jika Anda tidak menggunakan default.

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

Anda kemudian dapat membandingkan tanda tangan MD5 dengan tanda tangan di profil Anda. Pemeriksaan ini berguna jika Anda memiliki masalah koneksi atau memiliki kekhawatiran tentang salah menempelkan kunci publik ke bidang Data Kunci saat menambahkan kunci ke Azure DevOps.

T: Bagaimana cara mulai menggunakan SSH di repositori tempat saya saat ini menggunakan HTTPS?

A: Anda harus memperbarui origin remote di Git untuk mengubah dari HTTPS ke URL SSH. Setelah Anda memiliki URL kloning SSH, jalankan perintah berikut:

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

Perintah Git yang mengakses remote yang disebut origin sekarang akan menggunakan SSH.

T: Saya menggunakan Git LFS dengan Azure DevOps dan saya mengalami kesalahan saat menarik file yang dilacak oleh Git LFS.

A: Azure DevOps Services saat ini tidak mendukung LFS melalui SSH. Gunakan HTTPS untuk menyambungkan ke repositori dengan file terlacak Git LFS.

T: Bagaimana cara menggunakan lokasi kunci non-default, yaitu, bukan ~/.ssh/id_rsa dan ~/.ssh/id_rsa.pub?

A: Untuk menggunakan kunci yang disimpan di tempat yang berbeda dari default, lakukan dua tugas ini:

  1. Kunci harus berada dalam folder yang hanya dapat Anda baca atau edit. Jika folder memiliki izin yang lebih luas, SSH tidak akan menggunakan kunci.

  2. Anda harus memberi tahu SSH lokasi kunci, misalnya dengan menentukannya sebagai "Identitas" dalam konfigurasi SSH:

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

Pengaturan IdentitiesOnly yes memastikan bahwa SSH tidak akan menggunakan identitas lain yang tersedia untuk mengautentikasi. Ini sangat penting jika lebih dari satu identitas tersedia.

T: Saya memiliki beberapa kunci SSH. Bagaimana cara menggunakan kunci SSH yang benar untuk Azure DevOps?

A: Umumnya, jika Anda mengonfigurasi beberapa kunci untuk klien SSH dan terhubung ke server SSH, klien dapat mencoba kunci satu per satu sampai server menerimanya.

Namun, ini tidak berfungsi dengan Azure DevOps karena alasan teknis yang terkait dengan protokol SSH dan bagaimana URL Git SSH kami disusun. Azure DevOps akan secara membabi buta menerima kunci pertama yang disediakan klien selama autentikasi. Jika kunci tersebut tidak valid untuk repositori yang diminta, permintaan akan gagal tanpa mencoba kunci lain yang tersedia karena kesalahan berikut:

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

Untuk Azure DevOps, Anda harus mengonfigurasi SSH untuk secara eksplisit menggunakan file kunci tertentu. Prosedur ini sama seperti saat menggunakan kunci yang disimpan di lokasi non-default. Cukup beri tahu SSH untuk menggunakan kunci SSH yang benar untuk host Azure DevOps.

T: Bagaimana cara menggunakan kunci SSH yang berbeda untuk organisasi yang berbeda di Azure DevOps?

A: Azure DevOps akan menerima kunci pertama yang disediakan klien secara membabi buta selama autentikasi. Jika kunci tersebut tidak valid untuk repositori yang diminta, permintaan akan gagal dengan kesalahan berikut:

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

Namun, Anda dapat memodifikasi konfigurasi SSH untuk membedakan antara organisasi yang berbeda dan menyediakan kunci yang berbeda untuk masing-masing. Untuk melakukan ini, Anda harus menggunakan alias host untuk membuat bagian terpisah Host dalam konfigurasi SSH Anda. Ini karena semua URL Azure DevOps yang dihosting memiliki nama host yang sama (ssh.dev.azure.com), sehingga SSH tidak memiliki cara untuk membedakannya secara default.

# 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

Setelah itu, alih-alih menggunakan URL nyata, beri tahu Git Anda ingin menggunakan URL ini untuk setiap repositori sebagai jarak jauh dengan mengganti nama host di remote yang ada dan devops_fabrikamdevops_contoso masing-masing. Misalnya git@ssh.dev.azure.com:v3/Fabrikam/Project1/fab_repo akan menjadi git@devops_fabrikam:v3/Fabrikam/Project1/fab_repo.

T: Pemberitahuan apa yang mungkin saya terima tentang kunci SSH saya?

A: Setiap kali Anda mendaftarkan Kunci SSH baru dengan Layanan Azure DevOps, Anda menerima pemberitahuan email yang memberi tahu Anda bahwa kunci SSH baru telah ditambahkan ke akun Anda.

Contoh pemberitahuan SSH

T: Apa yang harus saya lakukan jika saya percaya bahwa seseorang selain saya menambahkan kunci SSH di akun saya?

A: Jika Anda menerima pemberitahuan tentang kunci SSH yang didaftarkan dan Anda tidak mengunggahnya secara manual ke layanan, kredensial Anda mungkin telah disusupi.

Langkah selanjutnya adalah menyelidiki apakah kata sandi Anda telah disusupi atau tidak. Mengubah kata sandi Anda selalu merupakan langkah pertama yang baik untuk mempertahankan terhadap vektor serangan ini. Jika Anda adalah pengguna Microsoft Entra, hubungi administrator Anda untuk memeriksa apakah akun Anda digunakan dari sumber/lokasi yang tidak diketahui.

T: Apa yang harus saya lakukan jika saya masih dimintai kata sandi saya dan GIT_SSH_COMMAND="ssh -v" git fetch menunjukkan no mutual signature algorithm atau corresponding algo not in PubkeyAcceptedAlgorithms?

J: Beberapa distribusi Linux, seperti Fedora Linux, memiliki kebijakan kripto yang memerlukan algoritma tanda tangan SSH yang lebih kuat daripada yang didukung Azure DevOps (per Januari 2021). Ada permintaan fitur terbuka untuk menambahkan dukungan ini.

Anda dapat mengatasi masalah ini dengan menambahkan kode berikut ke konfigurasi SSH Anda (~/.ssh/config):

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

Tip

Untuk instans Azure DevOps Server dan TFS yang dihost sendiri, gunakan nama host yang sesuai di Host baris, bukan ssh.dev.azure.com vs-ssh.visualstudio.com.