Menggunakan autentikasi kunci SSH
Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019
Anda dapat terhubung ke repositori Git melalui SSH di macOS, Linux, atau Windows untuk terhubung dengan aman dengan Azure DevOps.
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
):
- Linux
- macOS
- Sistem Windows yang menjalankan Git untuk Windows
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, Ed25519 digunakan.
Catatan
Satu-satunya jenis kunci SSH yang didukung oleh Azure DevOps adalah RSA.
Untuk menghasilkan file kunci menggunakan algoritma RSA yang didukung oleh Azure DevOps (baik RSA-SHA2-256 atau RSA-SHA2-512), jalankan salah satu perintah berikut dari PowerShell atau shell lain seperti bash
pada klien Anda:
ssh-keygen -t rsa-sha2-256
Atau
ssh-keygen -t rsa-sha2-512
Output dari perintah harus menampilkan output berikut (di mana username
adalah 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 diminta untuk menggunakan frasa sandi untuk mengenkripsi file kunci privat Anda. Frase sandi dapat 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.
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.
Pilih + Kunci Baru.
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.
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.
Pada halaman gambaran umum Kunci Umum SSH, sidik jari server ditampilkan. Catat sidik jari SHA256 untuk digunakan saat Anda pertama kali terhubung ke Azure DevOps melalui SSH.
Uji koneksi dengan menjalankan perintah berikut:
ssh -T git@ssh.dev.azure.com
Jika Anda tersambung untuk pertama kalinya, Anda akan 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 dengan sidik jari SHA256 yang ditampilkan di halaman Kunci Umum SSH yang disebutkan sebelumnya. Lanjutkan hanya jika cocok!
Masukkan
yes
untuk melanjutkan. Jika semuanya dikonfigurasi dengan benar, output akan terlihat seperti ini: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
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.
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
.Catatan
Dengan Azure DevOps Services, format untuk URL proyek adalah
dev.azure.com/{your organization}/{your project}
. Namun, format sebelumnya yang mereferensikanvisualstudio.com
format masih didukung. Untuk informasi selengkapnya, lihat Memperkenalkan Azure DevOps, Beralih organisasi yang sudah ada untuk menggunakan URL nama domain baru.Jalankan
git clone
dari perintah.git clone git@ssh.dev.azure.com:v3/fabrikam-fiber/FabrikamFiber/FabrikamFiber
Jika Anda tidak menggunakan Agen SSH, Anda diminta untuk memasukkan frasa sandi Anda:
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, 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
T: Saya melihat peringatan terkait ssh-rsa. Apa yang harus saya lakukan?
A: Ada dua pesan peringatan berbeda yang dapat melihat:
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.
Atau
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.
Jika Anda memodifikasi konfigurasi SSH untuk menurunkan tingkat pengaturan keamanan untuk Azure DevOps dengan menambahkan yang berikut ini ke file (~/.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 informasi selengkapnya, lihat posting blog.
T: SSH tidak dapat membuat koneksi. Apa yang harus saya lakukan?
A: Ada beberapa masalah berbeda yang dapat 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.
Jika Anda memodifikasi konfigurasi SSH untuk menurunkan tingkat pengaturan keamanan untuk Azure DevOps dengan menambahkan yang berikut ini ke file (
~/.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/ataursa-sha2-512
diizinkan.Untuk informasi selengkapnya, lihat posting blog.
Tidak ada kunci host yang cocok
Masalah 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
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 dandiffie-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. 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. 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 nondefault. 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 perlu mengubah jalur dan nama file kunci publik jika Anda tidak menggunakan default.
Catatan
Pada Agustus/September 2024, kami bermigrasi dari hash MD5 ke SHA-256. Anda mungkin perlu memilih fungsi yang benar selama periode transisi.
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
Anda kemudian dapat membandingkan tanda tangan 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 perlu 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 jarak jauh yang disebut origin
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 nondefault, 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:
Kunci harus berada dalam folder yang hanya dapat Anda baca atau edit. Jika folder memiliki izin yang lebih luas, SSH tidak menggunakan kunci.
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 menggunakan identitas lain yang tersedia untuk mengautentikasi. Pengaturan 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, ketika Anda mengonfigurasi beberapa kunci untuk klien SSH, klien mencoba mengautentikasi dengan setiap kunci secara berurutan sampai server SSH menerimanya.
Namun, pendekatan ini tidak berfungsi dengan Azure DevOps karena kendala teknis yang terkait dengan protokol SSH dan struktur URL Git SSH kami. Azure DevOps menerima kunci pertama yang disediakan oleh klien selama autentikasi. Jika kunci ini tidak valid untuk repositori yang diminta, permintaan gagal tanpa mencoba kunci lain yang tersedia, mengakibatkan kesalahan berikut:
remote: Public key authentication failed.
fatal: Could not read from remote repository.
Untuk Azure DevOps, Anda perlu mengonfigurasi SSH untuk secara eksplisit menggunakan file kunci tertentu. Prosedur ini sama seperti saat menggunakan kunci yang disimpan di lokasi nondefault. 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 secara membabi buta menerima kunci pertama yang disediakan klien selama autentikasi. Jika kunci tersebut tidak valid untuk repositori yang diminta, permintaan gagal dengan kesalahan berikut:
remote: Public key authentication failed.
fatal: Could not read from remote repository.
Kegagalan ini karena semua URL Azure DevOps memiliki nama host yang sama (ssh.dev.azure.com
), sehingga tidak mungkin bagi SSH untuk membedakannya secara default. Namun, Anda dapat memodifikasi konfigurasi SSH untuk membedakan antara organisasi yang berbeda dengan menyediakan kunci yang berbeda untuk masing-masing. Gunakan alias host untuk membuat bagian terpisah Host
dalam file konfigurasi SSH Anda.
# 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_fabrikam
devops_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 saat kunci SSH baru ditambahkan ke akun Anda.
T: Apa yang harus saya lakukan jika saya percaya bahwa seseorang selain saya menambahkan kunci SSH di akun saya?
A: Jika Anda menerima pemberitahuan pendaftaran kunci SSH yang tidak Anda mulai, kredensial Anda dapat disusupi.
Langkah selanjutnya adalah menyelidiki apakah kata sandi Anda 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
.