Стаття у Вікіпедії, мабуть, має найкращий опис:
Перевірка на сервері заснована на автентифікації виклику-відповіді. ssh підключається до сервера з ім'ям користувача та запитом ключа. Демон ssh отримує запит і повертає виклик на основі відкритого ключа, що зберігається у файлі аутентифікації. ssh використовує приватний ключ для побудови відповіді ключа та надсилає його на очікуючий sshd на іншому кінці з'єднання. Він не надсилає приватний ключ сам. Демон ssh перевіряє ключову відповідь, і якщо вона дійсна, надає доступ до системи. ssh-agent спрощує це, створивши сокет, який прослуховує з'єднання SSH. Користувач просто запускає ssh-агент, повідомляючи йому, як знайти їхні ключі (якщо вони не знаходяться за замовчуванням), одноразово вводить парольну фразу для кожного ключа, який буде використовуватися,
Знову дословно із статті wikipedia:
... ssh-agent створює сокет, а потім перевіряє з'єднання з ssh. Кожен, хто може підключитися до цього сокету, також має доступ до ssh-агента. Дозволи встановлюються як у звичайній системі Linux або Unix. Коли агент запускається, він створює новий каталог в / tmp з обмежуючими правами. Розетка знаходиться в папці.
Зазвичай він розміщується в системних або користувальницьких файлах rc, таких як $HOME/.bashrc
або $HOME/.profile
(для оболонок bash), щоб встановлені змінні ssh-agent
середовища повністю включалися у ваше середовище.
У моїй системі Fedora 14 вона запускається досить рано як частина підсистеми X11. У цьому файлі /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
Потім змінна $SSH_AGENT
використовується в інших сценаріях запуску X11, таких як тут /etc/X11/xinit/Xclients
:
exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"
Включивши його сюди, наступні змінні середовища встановлюються як частина батьківської оболонки, тому всі діти, що розщедрилися, також повинні мати їх, наприклад:
SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK;
SSH_AGENT_PID=18959; export SSH_AGENT_PID;
Тут є трохи більше складності, але в двох словах, це в основному те, що відбувається ssh-agent
.
Наприклад, у GNOME, ssh-agent
це фактично запуск для кожного користувача як програма для запуску:
TL; DR
Підсумок ssh-agent
існує так, що коли потрібні ваші ключі ssh, вам потрібно буде лише розблокувати їх одноразово з їх парольною фразою (припускаючи, що вони є), і з цього моменту вони доступні в їх розшифрованому вигляді в пам'яті (RAM).