Bài viết Wikipedia có thể có mô tả tốt nhất:
Việc xác minh đến máy chủ dựa trên xác thực phản hồi thử thách. ssh kết nối với máy chủ với tên người dùng và yêu cầu nhập khóa. Trình nền ssh nhận được yêu cầu và gửi lại một thử thách dựa trên khóa chung được lưu trong tệp xác thực. ssh sử dụng khóa riêng để tạo phản hồi khóa và gửi nó đến sshd đang chờ ở đầu kia của kết nối. Nó không gửi khóa riêng. Trình nền ssh xác nhận phản hồi chính và nếu hợp lệ, cấp quyền truy cập vào hệ thống. ssh-agent đơn giản hóa điều này bằng cách tạo một socket lắng nghe các kết nối SSH. Người dùng chỉ cần khởi động ssh-agent, cho nó biết cách tìm khóa của họ (nếu chúng không ở vị trí mặc định), nhập cụm mật khẩu cho mỗi khóa được sử dụng, trên cơ sở một lần,
Một lần nữa nguyên văn từ bài viết trên wikipedia:
... ssh-agent tạo một ổ cắm và sau đó kiểm tra các kết nối từ ssh. Mọi người có thể kết nối với ổ cắm này cũng có quyền truy cập vào ssh-agent. Các quyền được đặt như trong một hệ thống Linux hoặc Unix thông thường. Khi tác nhân khởi động, nó tạo một thư mục mới trong / tmp với các quyền hạn chế. Các ổ cắm được đặt trong thư mục.
Thông thường, nó được đặt trong các tệp RC của hệ thống hoặc người dùng như $HOME/.bashrc
hoặc $HOME/.profile
(đối với bash shell) để các biến môi trường ssh-agent
được đặt hoàn toàn vào môi trường của bạn.
Trên hệ thống Fedora 14 của tôi, nó khởi động khá sớm như là một phần của hệ thống con X11. Trong tập tin này , /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
Biến $SSH_AGENT
sau đó được sử dụng trong các tập lệnh khởi động X11 khác như ở đây , /etc/X11/xinit/Xclients
:
exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"
Bằng cách kết hợp nó vào đây, các biến môi trường sau đây sẽ được thiết lập như một phần của vỏ cha mẹ, do đó, tất cả trẻ em rẽ nhánh cũng nên có chúng, ví dụ:
SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK;
SSH_AGENT_PID=18959; export SSH_AGENT_PID;
Có một chút phức tạp hơn về vấn đề này nhưng tóm lại, đây là cơ bản những gì đang diễn ra ssh-agent
.
Ví dụ: trong Gnome, ssh-agent
thực tế là khởi chạy cho mỗi người dùng dưới dạng một ứng dụng khởi động:
TL; DR
Dòng dưới cùng, ssh-agent
tồn tại để khi các khóa ssh của bạn được yêu cầu, bạn chỉ phải mở khóa chúng một lần bằng cụm mật khẩu của chúng (giả sử chúng có một) và từ đó chúng có sẵn ở dạng được giải mã trong bộ nhớ (RAM).