Untuk menjalankan ssh-agent
saya harus menggunakan
eval $(ssh-agent)
Kenapa saya harus eval
output ssh-agent
?
Mengapa tidak dirancang agar saya bisa menjalankannya?
Catatan: Backticks (`) dihapus karena sudah tidak digunakan lagi. Anda dapat membaca lebih lanjut tentang hal ini di sini .
man
halaman, untuk permulaan ...ssh-agent
yang "dirancang dengan cara ini", itu unix / linux, karenassh-agent
berjalan dalam proses anak dari shell. Proses anak tidak dapat mengubah proses induk. Tetapi fungsi dapat: karena berjalan dalam proses saat ini. Jadi Anda bisa menulis fungsi:do_set_ssh_agent() { eval
ssh-agent; }
dan yang bisa dijalankan hanya sebagai:$ do_set_ssh_agent
. Tetapi "program" tidak (biasanya) diinstal sebagai "fungsi" di linux / unix; sebaliknya, program diinstal sebagai file, yang, sebagaimana disebutkan, dijalankan dalam proses anak. (Sumber skrip adalah pengecualian, tetapi ssh-agent adalah biner.)Jawaban:
ssh-agent
menampilkan variabel lingkungan yang harus Anda hubungkan ke sana:Dengan menelepon
eval
Anda segera memuat variabel-variabel itu ke lingkungan Anda.Kenapa
ssh-agent
tidak bisa melakukan itu sendiri ... Catat pilihan kata. Bukan "tidak akan", " tidak bisa ". Di Unix, suatu proses hanya dapat memodifikasi variabel lingkungannya sendiri, dan meneruskannya ke anak-anak. Itu tidak dapat mengubah lingkungan proses induknya karena sistem tidak akan mengizinkannya. Ini adalah desain keamanan yang cukup mendasar.Anda bisa menyiasatinya
eval
dengan menggunakan dissh-agent utility
manautility
shell login Anda, window manager Anda atau apa pun hal lain yang perlu ditetapkan variabel lingkungan SSH. Ini juga disebutkan dalam manual.sumber
eval
dengan menggunakan dissh-agent utility
manautility
shell login Anda, manajer jendela Anda atau hal lain apa pun yang diperlukan agar variabel lingkungan SSH diatur. Ini juga disebutkan dalam manual. Tidak ada utilitas eksternal yang dapat mengatur variabel di lingkungan panggilan.