Ini adalah contoh khas dari pertukaran antara keamanan dan kenyamanan. Untungnya ada sejumlah opsi. Solusi yang paling tepat tergantung pada skenario penggunaan dan tingkat keamanan yang diinginkan.
ssh-key dengan frasa sandi, no ssh-agent
Sekarang frasa sandi harus dimasukkan setiap kali kunci digunakan untuk otentikasi. Meskipun ini adalah opsi terbaik dari sudut pandang keamanan, ia menawarkan kegunaan terburuk. Ini juga dapat menyebabkan frasa sandi yang lemah dipilih secara berurutan - untuk mengurangi beban memasukkannya berulang kali.
ssh-key dengan frasa sandi, dengan ssh-agent
Menambahkan yang berikut ini ~/.bash_profile
akan secara otomatis memulai ssh-agent
dan memuat kunci ssh saat login:
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s`
ssh-add
fi
Sekarang frasa sandi harus dimasukkan pada setiap login. Meskipun sedikit lebih baik dari perspektif kegunaan, ini memiliki kelemahan yang ssh-agent
meminta frasa sandi terlepas dari apakah kunci akan digunakan atau tidak selama sesi login. Setiap login baru juga memunculkan ssh-agent
instance berbeda yang tetap berjalan dengan kunci yang ditambahkan dalam memori bahkan setelah logout, kecuali jika dibunuh secara eksplisit.
Untuk membunuh ssh_agent
saat keluar, tambahkan yang berikut ke~/.bash_logout
if [ -n "$SSH_AUTH_SOCK" ] ; then
eval `/usr/bin/ssh-agent -k`
fi
atau yang berikut ke ~/.bash_profile
trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0
Membuat banyak ssh-agent
contoh dapat dihindari dengan membuat soket komunikasi persisten ke agen di lokasi tetap dalam sistem file, seperti dalam jawaban Collin Anderson . Namun, ini merupakan peningkatan dari pemunculan beberapa agen, kecuali jika secara eksplisit membunuh kunci yang didekripsi masih tetap ada dalam memori setelah keluar.
Pada desktop, ssh-agent yang disertakan dengan lingkungan desktop, seperti Gnome Keyring SSH Agent , bisa menjadi pendekatan yang lebih baik karena mereka biasanya dapat dibuat untuk meminta frasa sandi saat pertama kali ssh-key digunakan saat sesi login dan menyimpan kunci privat yang didekripsi dalam memori sampai akhir sesi.
ssh-key dengan frasa sandi, dengan ssh-ident
ssh-ident
adalah utilitas yang dapat mengelola ssh-agent
atas nama Anda dan memuat identitas yang diperlukan. Ia menambahkan kunci hanya sekali sesuai kebutuhan, terlepas dari berapa banyak terminal, ssh atau sesi login yang memerlukan akses ke ssh-agent
. Itu juga dapat menambah dan menggunakan agen yang berbeda dan set kunci yang berbeda tergantung pada host yang terhubung, atau direktori ssh dipanggil. Ini memungkinkan untuk mengisolasi kunci ketika menggunakan penerusan agen dengan host yang berbeda. Ini juga memungkinkan untuk menggunakan beberapa akun di situs-situs seperti GitHub.
Untuk mengaktifkan ssh-ident
, instal dan tambahkan alias berikut ke Anda ~/bash_profile
:
alias ssh='/path/to/ssh-ident'
ssh-key dengan frasa sandi, dengan keychain
keychain
adalah utilitas kecil yang mengelola ssh-agent
atas nama Anda dan memungkinkannya ssh-agent
tetap berjalan saat sesi login berakhir. Pada login selanjutnya, keychain
akan terhubung ke ssh-agent
instance yang ada . Dalam praktiknya, ini berarti frasa sandi harus dimasukkan hanya selama login pertama setelah reboot. Pada login berikutnya, kunci yang tidak dienkripsi dari ssh-agent
instance yang ada digunakan. Ini juga dapat berguna untuk memungkinkan otentikasi RSA / DSA cron
tanpa kata sandi dalam pekerjaan tanpa kunci ssh tanpa kata sandi.
Untuk mengaktifkan keychain
, instal dan tambahkan sesuatu seperti berikut ke ~/.bash_profile
:
eval `keychain --agents ssh --eval id_rsa`
Dari sudut pandang keamanan, ssh-ident
dan keychain
lebih buruk daripada ssh-agent
kejadian terbatas pada masa hidup sesi tertentu, tetapi mereka menawarkan tingkat kenyamanan yang tinggi. Untuk meningkatkan keamanan keychain
, beberapa orang menambahkan --clear
opsi untuk ~/.bash_profile
permintaan gantungan kunci mereka . Dengan melakukan frasa sandi ini harus dimasukkan kembali saat login seperti di atas, tetapi cron
pekerjaan masih akan memiliki akses ke kunci yang tidak dienkripsi setelah pengguna logout. The keychain
halaman wiki memiliki informasi lebih lanjut dan contoh.
ssh-key tanpa frasa sandi
Dari sudut pandang keamanan, ini adalah opsi terburuk karena kunci privat sepenuhnya tidak terlindungi jika terbuka. Namun, ini adalah satu-satunya cara untuk memastikan bahwa frasa sandi tidak perlu dimasukkan kembali setelah reboot.
ssh-key dengan frasa sandi, dengan ssh-agent
, meneruskan frasa sandi ke ssh-add
dari skrip
Meskipun mungkin tampak seperti ide langsung untuk meneruskan frasa sandi ssh-add
dari sebuah skrip, misalnya echo "passphrase\n" | ssh-add
, ini tidak setegas yang sepertinya ssh-add
tidak membaca frasa sandi stdin
, tetapi membuka /dev/tty
langsung untuk membaca .
Hal ini dapat bekerja di sekitar dengan expect
, alat untuk mengotomatisasi aplikasi interaktif. Di bawah ini adalah contoh skrip yang menambahkan kunci ssh menggunakan frasa sandi yang disimpan dalam skrip:
#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact
Perhatikan bahwa frasa sandi disimpan dalam plaintext dalam skrip, dari perspektif keamanan, ini hampir tidak lebih baik daripada memiliki ssh-key tanpa kata sandi. Jika pendekatan ini akan digunakan, penting untuk memastikan bahwa expect
skrip yang berisi frasa sandi memiliki izin yang tepat, membuatnya dapat dibaca, dapat ditulis, dan hanya dapat dijalankan oleh pemilik kunci.