Saya ingin berkomunikasi antara beberapa komputer di jaringan saya (Ethernet statis), melalui SSH. Untuk melakukan itu saya perlu menjalankan ssh-add setiap kali saya masuk pada mesin tertentu, bagaimana saya bisa melakukannya sehingga itu diatur sekali dan tidak meminta saya untuk frasa sandi setiap kali saya masuk atau reboot mesin saya?
Saya tahu bahwa Anda harus menambahkan beberapa baris ke bash_profile
file, tetapi saya masih perlu mengetikkan kata sandi setiap kali saya reboot/login ke mesin tertentu.
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s`
ssh-add
fi
Jawaban yang Diterima:
Ini adalah contoh khas dari trade-off antara keamanan dan kenyamanan. Untungnya ada beberapa pilihan. Solusi yang paling tepat bergantung pada skenario penggunaan dan tingkat keamanan yang diinginkan.
ssh-key dengan frasa sandi, tidak 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 pemilihan frasa sandi yang lemah untuk mengurangi beban memasukkannya berulang kali.
ssh-key dengan frasa sandi, dengan ssh-agent
Menambahkan yang berikut ke ~/.bash_profile
akan secara otomatis memulai ssh-agent
dan muat ssh-key(s) 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 yaitu ssh-agent
meminta frasa sandi terlepas dari apakah kunci akan digunakan atau tidak selama sesi login. Setiap login baru juga memunculkan ssh-agent
yang berbeda instance yang tetap berjalan dengan kunci yang ditambahkan di memori bahkan setelah logout, kecuali dimatikan secara eksplisit.
Untuk membunuh ssh_agent
saat logout, tambahkan berikut ini ke ~/.bash_logout
if [ -n "$SSH_AUTH_SOCK" ] ; then
eval `/usr/bin/ssh-agent -k`
fi
atau berikut ini ke ~/.bash_profile
trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0
Membuat beberapa 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 memunculkan beberapa instance agen, kecuali jika secara eksplisit dimatikan, kunci yang didekripsi masih tetap ada di memori setelah logout.
Di desktop, ssh-agents yang disertakan dengan lingkungan desktop, seperti Agen SSH Gnome Keyring, dapat menjadi pendekatan yang lebih baik karena biasanya dapat dibuat untuk meminta frasa sandi saat pertama kali kunci ssh digunakan selama sesi login dan simpan kunci pribadi yang didekripsi dalam memori hingga 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 seperlunya. Itu menambahkan kunci hanya sekali saat dibutuhkan, 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 saat menggunakan penerusan agen dengan host yang berbeda. Ini juga memungkinkan untuk menggunakan banyak akun di situs seperti GitHub.
Untuk mengaktifkan ssh-ident
, instal dan tambahkan alias berikut ke ~/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
mengizinkan ssh-agent
untuk tetap berjalan saat sesi login berakhir. Pada login berikutnya, keychain
akan terhubung ke ssh-agent
yang ada contoh. Dalam praktiknya, ini berarti bahwa frasa sandi harus dimasukkan hanya selama login pertama setelah reboot. Pada login berikutnya, kunci tidak terenkripsi dari ssh-agent
yang ada contoh digunakan. Ini juga berguna untuk mengizinkan otentikasi RSA/DSA tanpa kata sandi di cron
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 dari ssh-agent
instans terbatas pada masa aktif sesi tertentu, tetapi mereka menawarkan tingkat kenyamanan yang tinggi. Untuk meningkatkan keamanan keychain
, beberapa orang menambahkan --clear
opsi untuk ~/.bash_profile
mereka panggilan gantungan kunci. Dengan melakukan ini, frasa sandi harus dimasukkan kembali saat login seperti di atas, tetapi cron
pekerjaan akan tetap memiliki akses ke kunci yang tidak terenkripsi setelah pengguna keluar. keychain
halaman wiki memiliki lebih banyak informasi dan contoh.
kunci ssh tanpa frasa sandi
Dari sudut pandang keamanan, ini adalah opsi terburuk karena kunci pribadi sepenuhnya tidak terlindungi jika dibuka. 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 yang mudah untuk meneruskan frasa sandi ke ssh-add
dari skrip, mis. echo "passphrase\n" | ssh-add
, ini tidak semudah yang terlihat seperti ssh-add
tidak membaca frasa sandi dari stdin
, tetapi membuka /dev/tty
langsung untuk dibaca.
Ini dapat diatasi 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 karena frasa sandi disimpan dalam teks biasa dalam skrip, dari sudut pandang keamanan, ini hampir tidak lebih baik daripada memiliki kunci ssh tanpa kata sandi. Jika pendekatan ini akan digunakan, penting untuk memastikan bahwa expect
skrip yang berisi frasa sandi memiliki izin yang ditetapkan untuk itu, sehingga hanya dapat dibaca, ditulis, dan dijalankan oleh pemilik kunci.