Artykuł w Wikipedii ma prawdopodobnie najlepszy opis:
Weryfikacja na serwerze opiera się na uwierzytelnianiu typu wyzwanie-odpowiedź. ssh łączy się z serwerem za pomocą nazwy użytkownika i żądania klucza. Demon ssh otrzymuje żądanie i odsyła wyzwanie na podstawie klucza publicznego zapisanego w pliku uwierzytelniającym. ssh używa klucza prywatnego do skonstruowania odpowiedzi klucza i wysyła go do oczekującego sshd na drugim końcu połączenia. Nie wysyła samego klucza prywatnego. Demon ssh sprawdza odpowiedź klucza, a jeśli jest poprawny, zapewnia dostęp do systemu. ssh-agent upraszcza to, tworząc gniazdo nasłuchujące połączeń SSH. Użytkownik po prostu uruchamia ssh-agent, mówiąc mu, jak znaleźć swoje klucze (jeśli nie znajdują się w domyślnej lokalizacji), wprowadza hasło dla każdego klucza, który ma być używany, jednorazowo,
Znowu dosłownie z artykułu w Wikipedii:
... ssh-agent tworzy gniazdo, a następnie sprawdza połączenia z ssh. Każdy, kto może połączyć się z tym gniazdem, ma również dostęp do agenta ssh. Uprawnienia są ustawione jak w zwykłym systemie Linux lub Unix. Po uruchomieniu agent tworzy nowy katalog w / tmp z ograniczonymi uprawnieniami. Gniazdo znajduje się w folderze.
Zazwyczaj jest umieszczany w plikach rc systemu lub użytkownika, takich jak $HOME/.bashrc
lub $HOME/.profile
(dla powłok bash), aby ssh-agent
zestaw zmiennych środowiskowych został całkowicie włączony do środowiska.
W moim systemie Fedora 14 uruchamia się dość wcześnie jako część podsystemu X11. W tym pliku /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
Zmienna $SSH_AGENT
jest następnie wykorzystywana w innych skryptach startowych X11, takich jak tutaj /etc/X11/xinit/Xclients
:
exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"
Po włączeniu go tutaj, następujące zmienne środowiskowe są ustawiane jako część powłoki nadrzędnej, dlatego też wszystkie dzieci pod rozwidleniem powinny je mieć, na przykład:
SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK;
SSH_AGENT_PID=18959; export SSH_AGENT_PID;
Jest w tym trochę więcej złożoności, ale w skrócie to w zasadzie o to chodzi ssh-agent
.
Na przykład w GNOME ssh-agent
jest uruchamiany na użytkownika jako aplikacja startowa:
TL; DR
Podsumowując, ssh-agent
istnieje tak, że gdy twoje klucze ssh są wymagane, musisz je odblokować tylko raz za pomocą hasła (zakładając, że je mają), a następnie są dostępne w formie odszyfrowanej w pamięci (RAM).