(Saya telah membaca banyak pertanyaan di situs ini yang terlihat terkait dan saya percaya ini adalah pertanyaan yang benar-benar baru.)
Saya memiliki banyak kunci di banyak server dan semuanya dilindungi dengan frasa sandi.
Saya suka memasukkan frasa sandi sebanyak yang saya suka memasukkan kata sandi - ini menguras produktivitas nyata.
ssh-agent + ssh-add perintah dapat digunakan pada shell login yang berarti Anda hanya perlu memasukkan kata sandi Anda sekali saat login
gantungan kunci dapat digunakan untuk membuat ssh-agent tetap hidup di luar logout, jadi misalnya Anda dapat memilikinya sehingga Anda hanya perlu memasukkan frasa sandi sekali saat boot, atau Anda dapat membuatnya tetap hidup selama satu jam atau lebih.
Masalah yang saya miliki adalah bahwa kedua solusi ini biasanya diinisiasi dalam shell login (mis. .zshrc
Mengandalkan saya memasukkan frasa sandi saya ketika saya masuk, bahkan jika saya tidak akan membutuhkannya dibuka kuncinya. (Saya tidak senang dengan gantungan kunci menjaga agen tetap hidup tanpa batas waktu.)
Yang saya inginkan adalah diminta untuk passphrase (untuk agen) hanya jika diperlukan .
Jadi saya bisa masuk ke server A, melakukan beberapa hal, lalu ssh ke server B dan pada saat itu diminta untuk passphrase. Lakukan beberapa hal di server B, keluar. Kembali ke A, lakukan beberapa hal lagi, ssh ke B lagi dan tidak perlu passphrase saya (ini dipegang oleh agen).
Saya perhatikan bahwa ini dimungkinkan pada desktop grafis seperti Gnome - Anda mendapatkan pop-up yang meminta frasa sandi untuk membuka kunci kunci pribadi Anda segera setelah Anda mencoba ssh. Jadi ini yang saya cari tetapi dari konsol.
Jawaban:
Jangan menambahkan apa pun ke skrip startup shell Anda, ini adalah peretasan yang tidak perlu.
Sebaliknya, tambahkan
ke .ssh / config Anda
Seperti ini, ssh-add dijalankan secara otomatis saat pertama kali Anda ssh ke kotak lain. Anda hanya perlu memasukkan kembali kunci Anda ketika kadaluwarsa dari ssh-agent atau setelah Anda reboot.
sumber
Zsh memiliki
preexec
hook yang mengeksekusi fungsi sebelum perintah yang dimasukkan pada commandline dieksekusi. Berikut adalah pengait yang mencarissh
di baris perintah Anda dan jika ditemukan, periksa keberadaan agen ssh. Jika tidak ditemukan, ia menjalankan gantungan kunci.Jadi dengan cara ini, gantungan kunci hanya dijalankan sebelum perintah ssh, dan hanya jika diperlukan.
Letakkan ini di
~/.zshrc
:Apa yang terjadi di sini adalah setiap kali perintah diketik,
check_ssh
dipanggil sebelum perintah dijalankan.Baris pertama fungsi memeriksa perintah yang diperluas untuk
ssh
menggunakan Zsh regex.ssh
harus memiliki batas kata di\b
kedua sisi. Jika ini tidak ditemukan maka fungsi kembali.Baris berikutnya memeriksa bahwa ada proses agen SSH dalam variabel lingkungan, dan bahwa proses itu masih ada dalam tabel proses, dan kemudian bahwa setidaknya satu kunci telah ditambahkan ke agen. Jika semua itu OK, maka ssh agent sudah diatur dan kita tidak perlu melakukan apa-apa, jadi ssh kembali.
Akhirnya kami mulai gantungan kunci, dengan agen tetap hidup selama satu jam.
Ini masih menyisakan masalah tentang hal-hal ssh tertanam, seperti
git
ataursync
atauscp
seperti itu tidak akan memicu fungsi (Anda bisa menambahkan ini ke regex).sumber
zsh
, orang dapat membuat skrip pendek dengan efek yang sama dan menempatkannya diPATH
depanssh
klien yang sebenarnya . Bahkan mungkin bekerja denganrsync
et al, jika mereka membacaPATH
alih-alih berlari/usr/bin/ssh
secara langsung.Untuk zsh, saya telah menulis satu set utilitas dan pembungkus untuk melakukan lebih kurang apa yang Anda inginkan: https://www.vinc17.net/unix/index.en.html#zsh-ssh-utils
Sebenarnya ini bahkan lebih, karena
ssh-agent
akan dibagikan oleh semua sesi login (desktop atau melalui SSH, dan Layar GNU didukung juga jika Anda memulai shell login dari itu, misalnya denganshell -zsh
dalam~/.screenrc
file), dan itu akan berhenti hanya setelah sesi terakhir berakhir.Catatan: Saya hanya menggunakan satu frasa sandi untuk semua kunci saya. Saya tidak yakin dengan perilaku frasa sandi yang berbeda; mungkin perlu beberapa perubahan.
sumber