Artikel Wikipedia mungkin memiliki deskripsi terbaik:
Verifikasi ke server didasarkan pada otentikasi tantangan-respons. ssh terhubung ke server dengan nama pengguna dan permintaan kunci. Daemon ssh mendapatkan permintaan dan mengirim kembali tantangan berdasarkan kunci publik yang disimpan dalam file otentikasi. ssh menggunakan kunci pribadi untuk membangun respons kunci, dan mengirimkannya ke sshd yang menunggu di ujung koneksi lainnya. Itu tidak mengirim kunci pribadi itu sendiri. Daemon ssh memvalidasi respons utama, dan jika valid, memberikan akses ke sistem. ssh-agent menyederhanakan ini dengan membuat soket yang mendengarkan koneksi SSH. Pengguna cukup memulai ssh-agent, memberi tahu cara menemukan kunci mereka (jika tidak ada di lokasi default), memasukkan frasa sandi untuk setiap kunci yang akan digunakan, satu kali,
Lagi kata demi kata dari artikel wikipedia:
... ssh-agent membuat socket dan kemudian memeriksa koneksi dari ssh. Setiap orang yang dapat terhubung ke soket ini juga memiliki akses ke ssh-agent. Izin diatur seperti dalam sistem Linux atau Unix yang biasa. Ketika agen mulai, itu menciptakan direktori baru di / tmp dengan izin terbatas. Soket terletak di folder.
Biasanya diletakkan di sistem atau file rc pengguna seperti $HOME/.bashrc
atau $HOME/.profile
(untuk shell bash) sehingga variabel lingkungan yang ssh-agent
ditetapkan dapat dimasukkan ke dalam lingkungan Anda sepenuhnya.
Pada sistem Fedora 14 saya, ini dimulai cukup awal sebagai bagian dari subsistem X11. Dalam file ini, /etc/X11/xinit/xinitrc-common
:
# Prefix launch of session with ssh-agent if available and not already running.
SSH_AGENT=
if [ -z "$SSH_AGENT_PID" ] && [ -x /usr/bin/ssh-agent ]; then
if [ "x$TMPDIR" != "x" ]; then
SSH_AGENT="/usr/bin/ssh-agent /bin/env TMPDIR=$TMPDIR"
else
SSH_AGENT="/usr/bin/ssh-agent"
fi
fi
Variabel $SSH_AGENT
tersebut kemudian digunakan dalam skrip start-up X11 lainnya seperti di sini /etc/X11/xinit/Xclients
:
exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"
Dengan memasukkannya ke sini, variabel lingkungan berikut ditetapkan sebagai bagian dari shell induk, oleh karena itu semua anak yang bercabang juga harus memilikinya, misalnya:
SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK;
SSH_AGENT_PID=18959; export SSH_AGENT_PID;
Ada sedikit lebih rumit untuk ini tetapi singkatnya pada dasarnya ini adalah apa yang terjadi ssh-agent
.
Misalnya di GNOME, ssh-agent
sebenarnya diluncurkan per pengguna sebagai aplikasi awal:
TL; DR
Intinya, ssh-agent
ada sehingga ketika kunci ssh Anda diperlukan, Anda hanya perlu membukanya satu kali dengan frasa sandi mereka (dengan asumsi mereka memiliki satu), dan sejak saat itu mereka tersedia dalam bentuk dekripsi dalam memori (RAM).