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 publik-privat SSH untuk mesin virtual 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 pasangan kunci privat publik RSA protokol 2 (SSH-2) dengan panjang minimum 2048 bit. Format kunci lainnya seperti ED25519 dan ECDSA 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

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/myprivatekey \
    -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

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

File kunci tersimpan

Enter file in which to save the key (/home/azureuser/.ssh/id_rsa): ~/.ssh/id_rsa

Nama pasangan kunci untuk artikel ini. Memiliki pasangan kunci bernama id_rsa adalah default; beberapa alat mungkin mengharapkan nama id_rsa file kunci 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.

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

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

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:

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 berformat RFC4716 dari kunci umum SSH yang ada:

ssh-keygen \
-f ~/.ssh/id_rsa.pub \
-e \
-m RFC4716 > ~/.ssh/id_ssh2.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-adduntuk 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

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.