ウィキペディアの記事には、おそらく最高の説明があります。
サーバーに対する検証は、チャレンジ/レスポンス認証に基づいています。sshは、ユーザー名とキーの要求を使用してサーバーに接続します。sshデーモンは要求を取得し、認証ファイルに保存されている公開鍵に基づいてチャレンジを送り返します。sshは秘密キーを使用してキー応答を作成し、接続のもう一方の端にある待機中のsshdに送信します。秘密鍵自体は送信しません。sshデーモンはキー応答を検証し、有効な場合はシステムへのアクセスを許可します。ssh-agentは、SSH接続をリッスンするソケットを作成することにより、これを簡素化します。ユーザーは単純にssh-agentを起動して、キーの検索方法を指示し(デフォルトの場所にない場合)、使用する各キーのパスフレーズを一度だけ入力します。
再びウィキペディアの記事から逐語的に:
... ssh-agentはソケットを作成し、sshからの接続を確認します。このソケットに接続できるすべてのユーザーは、ssh-agentにもアクセスできます。許可は、通常の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キーが必要な場合、パスフレーズで1回ロック解除するだけで(1つあれば)、それ以降はメモリ(RAM)の解読された形式で利用できるようになります。