Langkah-langkah terperinci: Membuat dan mengelola kunci SSH untuk autentikasi ke Linux VM di Azure
Berlaku untuk: ✔️ Mesin Virtual Linux ✔️ Set skala fleksibel
Dengan pasangan kunci secure shell (SSH), Anda dapat membuat komputer virtual Linux yang menggunakan kunci SSH untuk autentikasi. Artikel ini memperlihatkan kepada Anda cara membuat dan menggunakan pasangan file kunci umum-privat SSH RSA untuk koneksi klien SSH.
Jika Anda menginginkan perintah cepat daripada penjelasan yang lebih mendalam tentang kunci SSH, lihat Cara membuat pasangan kunci privat publik SSH untuk VM Linux di Azure.
Untuk membuat kunci SSH dan menggunakannya untuk terhubung ke Mesin Virtual Linux dari Windows, lihat Cara menggunakan kunci SSH dengan Windows di Azure. Anda juga dapat menggunakan portal Azure untuk membuat dan mengelola kunci SSH untuk membuat VM di portal.
Ringkasan SSH dan kunci
SSH adalah protokol koneksi terenkripsi yang menyediakan rincian masuk aman melalui koneksi yang tidak aman. Penggunaan kata sandi dengan koneksi SSH tidak membuat VM aman dari serangan brute-force, meskipun SSH menyediakan koneksi terenkripsi. Sebaiknya sambungkan ke VM melalui SSH menggunakan pasangan kunci privat-umum, juga dikenal sebagai kunci SSH.
Kunci umum ditempatkan di mesin virtual Anda.
Kunci pribadi tetap ada di sistem lokal Anda. Lindungi kunci privat ini. Jangan dibagikan.
Saat Anda menggunakan klien SSH untuk tersambung ke mesin virtual Anda (yang memiliki kunci umum), mesin virtual jarak jauh menguji klien untuk memastikan klien memiliki kunci privat yang benar. Jika klien memiliki kunci privat, itu diberikan akses ke VM.
Bergantung pada kebijakan keamanan organisasi, Anda dapat menggunakan kembali satu pasangan kunci publik-privat untuk mengakses beberapa VM Azure dan layanan. Anda tidak memerlukan sepasang kunci terpisah untuk setiap VM atau layanan yang ingin Anda akses.
Kunci umum Anda dapat dibagikan dengan siapa saja, tetapi hanya Anda (atau infrastruktur keamanan lokal Anda) yang memiliki akses ke kunci privat Anda.
Format kunci SSH yang didukung
Azure saat ini mendukung jenis kunci berikut:
- Protokol SSH 2 (SSH-2) RSA (Rivest, Shamir, Adleman) dengan panjang minimum 2048 bit
- ED25519 Keys dengan panjang tetap 256 bit
Format kunci lain seperti Elliptic-curve Diffie–Hellman (ECDH) dan Elliptic Curve Digital Signature Algorithm (ECDSA) saat ini tidak didukung.
Penggunaan dan manfaat kunci SSH
Saat Anda membuat Azure VM dengan menentukan kunci umum, Azure menyalin kunci umum (dalam format .pub
) ke folder ~/.ssh/authorized_keys
pada VM. Kunci SSH dalam ~/.ssh/authorized_keys
memastikan bahwa klien yang menghubungkan menyajikan kunci privat yang sesuai selama koneksi SSH. Di mesin virtual Linux Azure yang menggunakan kunci SSH untuk autentikasi, Azure menonaktifkan sistem autentikasi kata sandi server SSH dan hanya mengizinkan autentikasi kunci SSH. Dengan membuat Azure Linux VM dengan kunci SSH, Anda dapat membantu mengamankan penyebaran VM dan menyimpan langkah konfigurasi pasca-penyebaran yang tipikal untuk menonaktifkan kata sandi dalam file sshd_config
.
Jika Anda tidak ingin menggunakan kunci SSH, Anda dapat mengatur Linux VM Anda untuk menggunakan autentikasi kata sandi. Jika VM Anda tidak terekspos ke Internet, menggunakan kata sandi mungkin cukup. Namun, Anda masih perlu mengelola kata sandi untuk setiap mesin virtual Linux dan mempertahankan kebijakan serta praktik kata sandi yang sehat, seperti panjang kata sandi minimum juga pembaruan sistem rutin.
Hasilkan kunci dengan ssh-keygen
Untuk membuat kunci, perintah pilihan adalah ssh-keygen
, yang tersedia dengan utilitas OpenSSH di Azure Cloud Shell, host macOS atau Linux, dan Windows (10 & 11). ssh-keygen
mengajukan serangkaian pertanyaan dan kemudian menulis kunci privat dan kunci umum yang cocok.
Kunci SSH secara default disimpan di direktori ~/.ssh
. Jika Anda tidak memiliki direktori ~/.ssh
, perintah ssh-keygen
membuatnya untuk Anda dengan izin yang benar. Kunci SSH dibuat sebagai sumber daya dan disimpan di Azure untuk digunakan nanti.
Catatan
Anda juga dapat membuat kunci dengan Azure CLI dengan perintah az sshkey create, seperti yang dijelaskan dalam Membuat dan menyimpan kunci SSH.
Contoh dasar
Perintah berikut ssh-keygen
menghasilkan file kunci umum dan privat SSH RSA 4096-bit secara default dalam direktori ~/.ssh
. Jika pasangan kunci SSH yang ada ditemukan di lokasi saat ini, file tersebut akan ditimpa.
ssh-keygen -m PEM -t rsa -b 4096
Perintah berikut ssh-keygen
menghasilkan file kunci publik dan privat ED25519 256-bit secara default di ~/.ssh
direktori. Jika pasangan kunci SSH yang ada ditemukan di lokasi saat ini, file tersebut akan ditimpa.
ssh-keygen -m PEM -t ed25519
Contoh terperinci
Contoh berikut menunjukkan opsi perintah tambahan untuk membuat pasangan kunci RSA SSH. Jika pasangan kunci SSH ada di lokasi saat ini, file-file tersebut ditimpa.
ssh-keygen \
-m PEM \
-t rsa \
-b 4096 \
-C "azureuser@myserver" \
-f ~/.ssh/mykeys/myrsaprivatekey \
-N mypassphrase
Contoh berikut menunjukkan opsi perintah tambahan untuk membuat pasangan kunci ED25519 SSH. Jika pasangan kunci SSH ada di lokasi saat ini, file-file tersebut ditimpa.
ssh-keygen \
-m PEM \
-t ed25519 \
-C "azureuser@myserver" \
-f ~/.ssh/mykeys/myedprivatekey \
-N mypassphrase
Perintah dijelaskan
ssh-keygen
= program yang digunakan untuk membuat kunci
-m PEM
= format kunci sebagai PEM
-t rsa
= jenis kunci untuk dibuat, dalam hal ini dalam format RSA
-b 4096
= jumlah bit dalam kunci, dalam hal ini 4096
-C "azureuser@myserver"
= komentar ditambahkan ke akhir file kunci umum untuk mengidentifikasinya dengan mudah. Biasanya alamat email digunakan sebagai komentar, tetapi gunakan apa pun yang paling sesuai untuk infrastruktur Anda.
-f ~/.ssh/mykeys/myprivatekey
= filename file kunci privat, jika Anda memilih untuk tidak menggunakan nama default. File kunci umum yang sesuai ditambahkan dengan .pub
dibuat dalam direktori yang sama. Direktori harus ada.
-N mypassphrase
= frase sandi tambahan yang digunakan untuk mengakses file kunci privat.
Contoh ssh-keygen (RSA)
ssh-keygen -t rsa -m PEM -b 4096 -C "azureuser@myserver"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/azureuser/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/azureuser/.ssh/id_rsa.
Your public key has been saved in /home/azureuser/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vFfHHrpSGQBd/oNdvNiX0sG9Vh+wROlZBktNZw9AUjA azureuser@myserver
The key's randomart image is:
+---[RSA 4096]----+
| .oE=*B*+ |
| o+o.*++|
| .oo++*|
| . .B+.O|
| S o=BO.|
| . .o++o |
| . ... . |
| .. . |
| .. |
+----[SHA256]-----+
Contoh ssh-keygen (ED25519)
ssh-keygen -t ed25519 -m PEM -C "azureuser@myserver"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/azureuser/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/azureuser/.ssh/id_ed25519.
Your public key has been saved in /home/azureuser/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:vFfHHrpSGQBd/oNdvNiX0sG9Vh+wROlZBktNZw9AUjA azureuser@myserver
The key's randomart image is:
+---[ED25519 256]----+
| |
|.. . |
|o+.o . |
|*=o o o + + |
|*+o+ oSB + o |
|**++o.+oo = . |
|=+*..*.o E |
|.. o o.. |
| .o. |
+----[SHA256]-----+
File kunci tersimpan
Enter file in which to save the key (/home/azureuser/.ssh/id_rsa): ~/.ssh/id_rsa
or
Enter file in which to save the key (/home/azureuser/.ssh/id_ed25519): ~/.ssh/id_ed25519
Nama pasangan kunci default untuk RSA dan ED25519 adalah id_rsa
dan id_ed25519
masing-masing; beberapa alat mungkin mengharapkan id_rsa
id_ed25519
nama file kunci atau privat, jadi memilikinya adalah ide yang baik. Direktori ~/.ssh/
adalah lokasi default untuk pasangan kunci SSH dan file konfigurasi SSH. Jika tidak ditentukan dengan jalur lengkap, ssh-keygen
buat kunci di direktori kerja saat ini, bukan default ~/.ssh
.
Daftar direktori ~/.ssh
Untuk menampilkan file yang ada di direktori ~/.ssh
, jalankan perintah berikut. Jika tidak ada file yang ditemukan di direktori atau direktori itu sendiri hilang, pastikan bahwa semua perintah sebelumnya berhasil dijalankan. Anda mungkin memerlukan akses root untuk memodifikasi file di direktori ini pada distribusi Linux tertentu.
Pasangan Kunci RSA:
ls -al ~/.ssh
-rw------- 1 azureuser staff 1675 Aug 25 18:04 id_rsa
-rw-r--r-- 1 azureuser staff 410 Aug 25 18:04 id_rsa.pub
pasangan kunci ED25519:
ls -al ~/.ssh
-rw------- 1 azureuser staff 1675 Aug 25 18:04 id_ed25519
-rw-r--r-- 1 azureuser staff 410 Aug 25 18:04 id_ed25519.pub
Frase sandi kunci
Enter passphrase (empty for no passphrase):
Sangat disarankan untuk menambahkan frase sandi ke kunci privat Anda. Tanpa frase sandi untuk melindungi file kunci, siapa pun dengan file dapat menggunakannya untuk masuk ke server apa pun yang memiliki kunci umum yang sesuai. Menambahkan frasa sandi menawarkan perlindungan lebih jika seseorang dapat memperoleh akses ke file kunci privat Anda, memberi Anda waktu untuk mengubah kunci.
Hasilkan kunci secara otomatis selama penyebaran
Jika menggunakan Azure CLI untuk membuat mesin virtual, Anda dapat secara opsional membuat file kunci umum dan privat SSH dengan menjalankan perintah az vm create dengan opsi --generate-ssh-keys
tersebut. Perintah ini akan default ke jenis kunci RSA, untuk menghasilkan kunci ED25519 yang dapat Anda teruskan dalam perintah bendera --ssh-key-type
tambahan. Kunci disimpan dalam direktori ~/.ssh. Perhatikan bahwa opsi perintah ini tidak menimpa kunci jika kunci sudah ada di lokasi tersebut, seperti dengan beberapa gambar Galeri Komputasi yang telah dikonfigurasi sebelumnya.
Contoh dasar
Buat VM Linux Ubuntu sederhana bersama dengan pasangan kunci Ed25519 SSH.
az vm create -n MyVm -g MyResourceGroup --image Ubuntu2204 --generate-ssh-keys --ssh-key-type ed25519
Menyediakan kunci umum SSH saat menyebarkan VM
Untuk membuat VM Linux yang menggunakan kunci SSH untuk autentikasi, berikan kunci umum SSH Anda saat membuat VM menggunakan portal Azure, CLI, templat Resource Manager, atau metode lainnya. Saat menggunakan portal, Anda memasukkan kunci umum itu sendiri. Jika Anda menggunakan Azure CLI untuk membuat VM dengan kunci umum yang sudah ada, tentukan nilai atau lokasi kunci umum ini dengan menjalankan perintah buat az vm dengan opsi --ssh-key-value
tersebut.
Jika Anda tidak terbiasa dengan format kunci umum SSH, Anda dapat melihat kunci umum dengan menjalankan cat
sebagai berikut, mengganti ~/.ssh/id_rsa.pub
dengan lokasi file kunci umum Anda sendiri:
Pasangan kunci RSA
cat ~/.ssh/id_rsa.pub
Outputnya mirip dengan contoh berikut (contoh yang diredaksi di bawah):
ssh-rsa XXXXXXXXXXc2EAAAADAXABAAABAXC5Am7+fGZ+5zXBGgXS6GUvmsXCLGc7tX7/rViXk3+eShZzaXnt75gUmT1I2f75zFn2hlAIDGKWf4g12KWcZxy81TniUOTjUsVlwPymXUXxESL/UfJKfbdstBhTOdy5EG9rYWA0K43SJmwPhH28BpoLfXXXXXG+/ilsXXXXXKgRLiJ2W19MzXHp8z3Lxw7r9wx3HaVlP4XiFv9U4hGcp8RMI1MP1nNesFlOBpG4pV2bJRBTXNXeY4l6F8WZ3C4kuf8XxOo08mXaTpvZ3T1841altmNTZCcPkXuMrBjYSJbA8npoXAXNwiivyoe3X2KMXXXXXdXXXXXXXXXXCXXXXX/ azureuser@myserver
Jika Anda menyalin dan menempelkan konten file kunci umum ke portal Azure atau templat Resource Manager, pastikan Anda tidak menyalin spasi kosong tambahan atau memperkenalkan pembatas baris tambahan. Misalnya, jika Anda menggunakan macOS, Anda dapat membuat alur file kunci umum (secara default, ~/.ssh/id_rsa.pub
) ke pbcopy untuk menyalin konten (ada program Linux lain yang melakukan hal yang sama, seperti xclip
).
Jika Anda lebih suka menggunakan kunci umum yang memiliki format multiline, Anda dapat membuat kunci berformat RFC4716 dalam kontainer 'pem' dari kunci umum yang sebelumnya Anda buat.
Untuk membuat kunci yang diformat RFC4716 dari kunci umum SSH yang ada:
ssh-keygen \
-f ~/.ssh/id_rsa.pub \
-e \
-m RFC4716 > ~/.ssh/id_ssh2.pem
pasangan kunci ED25519
cat ~/.ssh/id_ed25519.pub
Outputnya mirip dengan contoh berikut (contoh yang diredaksi di bawah):
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP6I5JuhGq3RidMNpxrplIQwEfc4Rh7UyV8JYYH2U2xA azureuser@myserver
Jika Anda menyalin dan menempelkan konten file kunci umum ke portal Azure atau templat Resource Manager, pastikan Anda tidak menyalin spasi kosong tambahan atau memperkenalkan pembatas baris tambahan. Misalnya, jika Anda menggunakan macOS, Anda dapat membuat alur file kunci umum (secara default, ~/.ssh/id_ed25519.pub
) ke pbcopy untuk menyalin konten (ada program Linux lain yang melakukan hal yang sama, seperti xclip
).
Jika Anda lebih suka menggunakan kunci umum yang memiliki format multiline, Anda dapat membuat kunci berformat RFC4716 dalam kontainer 'pem' dari kunci umum yang sebelumnya Anda buat.
Untuk membuat kunci berformat PEM dari kunci umum SSH yang ada:
ssh-keygen \
-f ~/.ssh/id_ed25519.pub \
-e \
-m RFC4716 > ~/.ssh/id_edssh.pem
SSH ke VM Anda dengan klien SSH
Dengan kunci umum yang diterapkan pada Azure VM Anda, dan kunci privat pada sistem lokal Anda, SSH ke VM Anda menggunakan alamat IP atau nama DNS VM Anda. Ganti azureuser dan myvm.westus.cloudapp.azure.com dalam perintah berikut ini dengan nama pengguna admin dan nama domain (atau alamat IP) yang sepenuhnya memenuhi syarat:
ssh azureuser@myvm.westus.cloudapp.azure.com
Jika Anda memberikan frase sandi saat membuat pasangan kunci, masukkan frase sandi saat diminta selama proses masuk. (Server ditambahkan ke folder ~/.ssh/known_hosts
, Anda dan Anda tidak akan diminta untuk tersambung lagi sampai kunci umum di Azure VM Anda berubah atau nama server dihapus dari ~/.ssh/known_hosts
.)
Jika VM menggunakan kebijakan akses tepat waktu, Anda perlu meminta akses sebelum dapat tersambung ke VM. Untuk informasi selengkapnya tentang kebijakan tepat waktu, lihat Mengelola akses komputer virtual menggunakan kebijakan tepat waktu.
Gunakan agen ssh untuk menyimpan frase sandi kunci privat Anda
Untuk menghindari pengetikan frase sandi file kunci privat Anda setiap kali masuk SSH, Anda dapat menggunakan ssh-agent
untuk menyimpan frase sandi file kunci privat. Jika Anda menggunakan Mac, rantai kunci macOS menyimpan frase sandi kunci privat dengan aman saat Anda memanggil ssh-agent
.
Verifikasi dan gunakan ssh-agent
dan ssh-add
untuk menginformasikan sistem SSH tentang file kunci sehingga Anda tidak perlu menggunakan frase sandi secara interaktif.
eval "$(ssh-agent -s)"
Sekarang tambahkan kunci privat untuk ssh-agent
menggunakan ssh-add
perintah.
ssh-add ~/.ssh/id_rsa
or
ssh-add ~/.ssh/id_ed25519
Frase sandi kunci privat sekarang disimpan di ssh-agent
.
Gunakan ssh-copy-id untuk menyalin kunci ke VM yang ada
Jika Anda telah membuat VM, Anda dapat menambahkan kunci umum SSH baru ke Linux VM Anda menggunakan ssh-copy-id
.
ssh-copy-id -i ~/.ssh/id_rsa.pub azureuser@myserver
Membuat dan mengonfigurasi file konfigurasi SSH
Anda dapat membuat dan mengonfigurasi file konfigurasi SSH (~/.ssh/config
) untuk mempercepat masuk dan untuk mengoptimalkan perilaku klien SSH Anda.
Contoh berikut menunjukkan konfigurasi sederhana yang dapat Anda gunakan untuk masuk dengan cepat sebagai pengguna ke VM tertentu menggunakan kunci privat SSH default.
Membuat file .
touch ~/.ssh/config
Edit file untuk menambahkan konfigurasi SSH baru
vim ~/.ssh/config
Tambahkan pengaturan konfigurasi yang sesuai untuk VM host Anda. Dalam contoh ini, nama mesin virtual (Host) adalah myvm, nama akun (Pengguna) adalah azureuser dan Alamat IP atau FQDN (Nama Host) adalah 192.168.0.255.
# Azure Keys
Host myvm
Hostname 192.168.0.255
User azureuser
# ./Azure Keys
Anda dapat menambahkan konfigurasi untuk host tambahan untuk memungkinkan masing-masing menggunakan pasangan kunci khususnya sendiri. Lihat file konfigurasi SSH untuk opsi konfigurasi tingkat lanjut lainnya.
Sekarang setelah memiliki pasangan kunci SSH dan file konfigurasi SSH yang dikonfigurasi, Anda dapat masuk ke mesin virtual Linux dengan cepat dan aman. Saat Anda menjalankan perintah berikut, SSH menemukan dan memuat pengaturan apa pun dari blok Host myvm
dalam file konfigurasi SSH.
ssh myvm
Pertama kali Anda masuk ke server menggunakan kunci SSH, perintah meminta frase sandi Anda untuk file kunci tersebut.
Langkah berikutnya
Selanjutnya adalah membuat Azure Linux VM menggunakan kunci umum SSH baru. Azure VM yang dibuat dengan kunci umum SSH karena masuk lebih aman daripada VM yang dibuat dengan metode masuk default, kata sandi.