Tentang Agen SSH

pengantar


SSH-agent adalah bagian dari OpenSSH. Dalam posting ini saya akan menjelaskan apa itu agen, bagaimana menggunakannya dan bagaimana cara kerjanya agar kunci Anda tetap aman. Saya juga akan menjelaskan penerusan agen dan cara kerjanya. Saya akan membantu Anda mengurangi risiko menggunakan penerusan agen dan akan membagikan alternatif untuk penerusan agen yang dapat Anda gunakan saat mengakses host internal Anda melalui bastion.

Apa itu agen SSH


ssh-agentAdalah manajer kunci untuk SSH. Ini menyimpan kunci dan sertifikat Anda dalam memori, tidak terenkripsi dan siap digunakan ssh. Ini menghilangkan kebutuhan untuk memasukkan kata sandi setiap kali Anda terhubung ke server. Ini berjalan di latar belakang pada sistem Anda, terpisah dari ssh, dan biasanya dimulai pada awal pertama ssh.

Agen SSH menjaga kunci rahasia tetap aman karena tidak :

  • Itu tidak menulis informasi kunci ke disk.
  • Itu tidak memungkinkan Anda untuk mengekspor kunci pribadi Anda.

Kunci rahasia yang disimpan dalam Agen hanya dapat digunakan untuk satu tujuan: menandatangani pesan.

Tetapi jika agen hanya dapat menandatangani pesan, bagaimana SSH mengenkripsi dan mendekripsi lalu lintas?

Dalam studi pertama kunci publik dan pribadi SSH, wajar untuk mengasumsikan bahwa SSH menggunakan pasangan kunci ini untuk mengenkripsi dan mendekripsi lalu lintas. Itulah yang saya pikirkan. Tapi ini bukan masalahnya. Pasangan kunci SSH hanya digunakan untuk otentikasi selama koneksi awal.

Misalnya, inilah cara memverifikasi kunci pengguna selama koneksi SSH, dari perspektif server:

  • Klien menyediakan server dengan kunci publik.
  • Server menghasilkan dan mengirim pesan acak singkat yang meminta klien untuk menandatanganinya menggunakan kunci pribadi.
  • Klien meminta agen SSH untuk menandatangani pesan dan mengirimkan hasilnya kembali ke server.
  • Server memverifikasi tanda tangan menggunakan kunci publik klien.
  • Sekarang server memiliki bukti bahwa klien memiliki kunci pribadi.

Kemudian, selama proses koneksi, satu set kunci baru, sesaat dan simetris dihasilkan, yang digunakan untuk mengenkripsi lalu lintas sesi SSH. Kunci-kunci ini bahkan mungkin tidak berlangsung sepanjang sesi; Acara rekey terjadi secara berkala.

Protokol Agen


SSH menggunakan soket domain Unix untuk berkomunikasi dengan agen melalui protokol agen SSH . Kebanyakan orang menggunakan ssh-agentyang datang dengan OpenSSH, tetapi ada banyak alternatif sumber terbuka.

Protokol agen sangat sederhana sehingga Anda bisa menulis SSH-agen dasar dalam satu atau dua hari. Ini hanya memiliki beberapa operasi dasar:

  • Tambahkan pasangan kunci reguler (kunci privat publik dan dekripsi)
  • Tambahkan pasangan kunci terbatas (kunci privat publik dan dekripsi)
  • Tambahkan kunci (reguler atau terbatas) dari kartu pintar (hanya kunci publik)
  • Hapus kunci
  • Kunci daftar disimpan di agen
  • Menandatangani pesan dengan kunci yang disimpan di agen
  • Kunci atau buka kunci seluruh agen dengan kata sandi

Apa itu kunci terbatas? Ini biasanya merupakan kunci yang memiliki masa pakai terbatas atau memerlukan konfirmasi eksplisit oleh pengguna saat menggunakannya.

Perintah ssh-addadalah gerbang Anda ke agen SSH. Dia melakukan semua operasi ini kecuali untuk tanda tangan. Ketika Anda menjalankan ssh-add tanpa parameter apa pun, itu akan memindai direktori home Anda untuk beberapa kunci standar dan menambahkannya ke agen Anda. Secara default, ini mencari:

  • ~/.ssh/id_rsa
  • ~/.ssh/id_ed25519
  • ~/.ssh/id_dsa
  • ~/.ssh/id_ecdsa

Segera setelah Anda menambahkan kunci ke gantungan kunci, mereka akan secara otomatis digunakan ssh.

ssh-dan MacOS Keychain
ssh-agent , yang dikirimkan bersama macOS, dapat menyimpan frasa sandi untuk kunci di macOS Keychain, yang membuatnya lebih mudah untuk menambahkan kembali kunci ke agen setelah reboot. Tergantung pada pengaturan Keychain Anda, Anda mungkin masih perlu membukanya setelah reboot. Untuk menyimpan frasa sandi utama ke Keychain, jalankan perintah ssh-add -K [ ]. Frasa sandi biasanya disimpan dalam "Item Lokal". ssh-agentakan menggunakan frasa sandi yang disimpan ini secara otomatis sesuai kebutuhan.

Apa itu penerusan agen?


Fitur penerusan agen memungkinkan agen SSH lokal Anda untuk berkomunikasi melalui koneksi SSH yang ada dan mengautentikasi secara transparan ke server yang lebih jauh. Sebagai contoh, misalkan Anda masuk ke EC2 melalui SSH dan ingin mengkloning repositori GitHub pribadi dari sana. Tanpa penerusan agen, Anda harus menyimpan salinan kunci pribadi GitHub Anda pada host EC2. Saat agen dialihkan, klien SSH di EC2 dapat menggunakan kunci di komputer lokal Anda untuk otentikasi di GitHub.

Cara kerja penerusan agen


Pertama, sedikit latar belakang. Koneksi SSH dapat memiliki beberapa saluran. Berikut ini adalah contoh umum: koneksi interaktif ke bastion-host (kotak melompat) dilakukan pada satu saluran. Ketika penerusan agen diaktifkan untuk koneksi (biasanya menggunakan ssh -A), saluran kedua terbuka di latar belakang untuk meneruskan setiap permintaan agen kembali ke komputer lokal Anda.

Dalam hal ssh, tidak ada perbedaan antara jarak jauh dan lokal ssh-agent. SSH selalu melihat variabel lingkungan $SSH_AUTH_SOCKuntuk menemukan soket domain Unix untuk agen. Saat menyambungkan ke host jarak jauh dengan penerusan agen diaktifkan, SSHD akan membuat soket domain Unix jarak jauh yang dikaitkan dengan saluran penerusan agen dan mengekspor $SSH_AUTH_SOCKyang menunjuk ke sana.

gambar

Penerusan agen dikaitkan dengan risiko tertentu


Ketika Anda mengarahkan soket domain ssh-agentUnix ke host jarak jauh, ini menimbulkan risiko keamanan: siapa pun dengan akses root pada host jarak jauh dapat secara diam-diam mengakses agen SSH lokal Anda melalui soket. Mereka dapat menggunakan kunci Anda untuk menyamar sebagai Anda di komputer lain di jaringan.

Berikut adalah contoh bagaimana ini terlihat:

gambar

Cara mengurangi risiko Anda dengan penerusan agen


Berikut adalah beberapa cara untuk membuat pengalihan agen lebih aman:

  • Jangan aktifkan ForwardAgentsecara default.


Blokir agen ssh Anda saat Anda menggunakan penerusan agen. ssh-add -xmemblokir agen dengan kata sandi, dan ssh-add -Xmembukanya. Ketika Anda terhubung ke host jarak jauh dengan penerusan agen, tidak ada yang bisa memasukkan agen Anda tanpa kata sandi.

Atau gunakan agen SSH alternatif yang menanyakan Anda ketika sedang digunakan. Sekey menggunakan Touch ID pada macOS untuk menyimpan kunci di kantong keamanan MacBook Pro.

Atau jangan gunakan penerusan agen sama sekali. Jika Anda mencoba mengakses host internal melalui bastion, ada ProxyJumpalternatif yang jauh lebih aman untuk use case ini. (Lihat di bawah)

Gunakan ProxyJump: alternatif yang lebih aman


Ketika Anda ingin melewati host-bastion (jumpbox), Anda benar-benar tidak perlu meneruskan agen. Pendekatan terbaik adalah dengan menggunakan arahan ProxyJump.

Alih-alih mengarahkan agen melalui saluran terpisah, ia ProxyJumpmengarahkan ulang input dan output standar klien SSH lokal Anda melalui bastion dan lebih jauh ke host jarak jauh. Begini cara kerjanya:

  1. Jalankan ssh -J bastion.example.com cloud.computer.internaluntuk terhubung cloud.computer.internalmelalui host benteng Anda bastion.example.com. cloud.computer.internalApakah nama host yang dapat ditemukan dengan mencari DNS aktif bastion.example.com.
  2. Klien SSH Anda menggunakan kunci dari agen Anda untuk terhubung bastion.example.com.
  3. Setelah menghubungkan SSHD ke benteng, itu menghubungkan ke cloud.computer.internaldan mentransfer koneksi ini ke klien SSH lokal Anda.
  4. Klien SSH lokal Anda melewati koneksi lagi, kali ini dengan cloud.computer.internal

Anda dapat menganggapnya sebagai SSH dalam sesi SSH; kecuali bahwa ssh tidak pernah berjalan di atas bastion. Sebagai gantinya, ia sshdterhubung ke cloud.computer.internaldan memberikan kontrol koneksi ini (input dan output standar) kembali ke SSH lokal Anda, yang kemudian membuat koneksi kedua.

Mengkonfigurasi ProxyJump

Katakanlah bastion-host ini bastion.example.com. Saya dapat mengkonfigurasi ~/.ssh/configseperti ini:

Host bastion.example.com
	User carl

Host *.computer.internal
	ProxyJump bastion.example.com
	User carl

Lalu saya hanya berlari ssh cloud.computer.internaluntuk terhubung ke tujuan internal melalui benteng - tanpa agen forwarding.

Jika ProxyJump tidak berfungsi ...

Versi SSH dan SSHD yang lebih lama (sebelum versi 7.2, dirilis pada 2016) tidak mendukung ProxyJump. Tetapi Anda dapat melakukan operasi yang setara menggunakan ProxyCommanddan netcat . Berikut ini sebuah contoh:

ssh -o ProxyCommand="ssh bastion.example.com nc %h %p" cloud.computer.internal

Yang ajaib di sini adalah SSH itu sendiri adalah server proxy yang Anda gunakan untuk SSH. Bagian nc %h %phanya membuka koneksi socket mentah ke cloud.computer.internalpada port 22. Standar input / output dari perintah ssh induk diteruskan langsung ke ProxyCommandsehingga induk ssh dapat mengotentikasi ke host internal melalui koneksi proxy.



gambar
Pelajari detail tentang cara mendapatkan profesi yang dicari dari awal atau Tingkatkan keterampilan dan gaji dengan mengambil kursus online SkillFactory:



Baca lebih banyak



All Articles