ssh-agent は、グラフィックで始まるときにキーを追加しません。

ssh-agent は、グラフィックで始まるときにキーを追加しません。

最近、私は自動起動(KDE)に次のスクリプトを追加しました:

eval `ssh-agent`
ssh-add

スクリプトはログイン時に開始され、パスワードを要求してキーをロードする必要があります。効果はほぼ完璧です。スクリプトが正しく実行され、エージェントが起動し、環境変数がすべて設定され、パスワードの入力を求められます。唯一の問題は、後でキーがロードされないことです。ただし、端末に ssh-add と入力すると、パスワードの入力を求められ、残りの X セッション中にキーが保存されます。

私は何が間違っていましたか?パスワードを入力する要求にもかかわらず、キーがロードされないのはなぜですか?

PS:私はDebian jessieを使っています。

ベストアンサー1

この問題を引き起こす可能性がある2つのシナリオを考えてみましょう。

どちらも、多くのデスクトップマネージャが独自のSSHキーエージェントをリリースしているという事実から来ています。エクスポートされた変数をインポートするには、デスクトップマネージャ(ターミナルエミュレータ)で起動されたアプリケーションがデスクトップマネージャの前にエージェントを起動する必要があるため、これが行われます。

  1. デスクトップマネージャを起動すると、デスクトップマネージャは独自のSSHエージェントを起動し、最終的にそれを置き換えます。

    SSHエージェントをいつ起動するのかはわかりませんが、エージェントの後にDesktop Managerが起動すると、エクスポートした変数が作成した変数よりも優先されます。

  2. デスクトップ管理者は、ユーザーが起動する前に独自のSSHエージェントを起動し、デスクトップ管理者は保持されません。

    ターミナルウィンドウを起動して実行すると、ターミナルウィンドウを閉じた後にエクスポートされたeval $(ssh-agent); ssh-add変数は保持されません。ssh-agent新しいターミナルウィンドウを起動すると、デスクトップマネージャが起動したSSHエージェントによって設定された変数が取得されます。


仕組みは、ssh-agentバックグラウンドでデーモンプロセスを開始し、設定する必要があるいくつかの変数を印刷することです。

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-JLbBwVBP4754/agent.4754; export SSH_AUTH_SOCK;
SSH_AGENT_PID=4755; export SSH_AGENT_PID;
echo Agent pid 4755;

したがって、を設定するときにeval $(ssh-agent)これらの変数をすべて設定するだけです。

変数は子にのみ継承できるため、デスクトップマネージャで変数を保持するには、デスクトップマネージャが起動する前に設定する必要があります。これは正しく実行するのが難しく、ディストリビューションによって異なります。これが、多くのデスクトップ管理者が自分でこれを行う理由です。
これはpamスタックの初期化中にも行われることがあります。

おすすめ記事