ログアウト時にssh-agentを終了する必要があるのはなぜですか?

ログアウト時にssh-agentを終了する必要があるのはなぜですか?

私はmacOSノートブックと年中無休で動作するサーバーにssh-agentを設定しました。ログアウトするたびにssh-agentを終了する必要があるのはなぜですか?

ssh-agentに関する私の知識のソース:https://kb.iu.edu/d/aeww

eval `ssh-agent`    # Start ssh-agent
echo $SSH_AGENT_PID    # 20552 (Check ssh-agent is running)
ssh-add    # Add id_rsa key to ssh-agent
kill $SSH_AGENT_PID    # Kill ssh-agent on logout

この最後のステップが必要なのはなぜですか?

ssh-agentプロセスを終了する方法

実行中のすべてのshh-agentプロセスを見つける最も簡単な方法

ps ax | grep ssh-agent    # outputs details of processes

または

pgrep ssh-agent    # outputs list of PIDs only

実行中のすべてのssh-agentプロセスを終了する最も簡単な方法

pkill ssh-agent

答え1

エージェントを手動でシャットダウンしないと、エージェントはシステムに残ります。

一般的に乱雑なことに加えて、2つの潜在的な問題があります。

  1. Kusanalandaが指摘したように、これはssh-agentログインするたびに異なるプロセスを作成し、プロセステーブルが少し混乱することを意味します。

  2. もっと深刻なのは、すべてのプロセスにあなたのやるメモリ内の秘密鍵です。攻撃者がシステムにアクセスしてssh-agentカーネルメモリ管理またはコード自体のバグ(仮説、現在はまったくわからない)を悪用して秘密鍵を潜在的に抽出しようとする場合。

もちろん、最後の可能性は低いですが、プロセスを終了し、リスクを完全に排除することも同様に簡単です。

申し訳ありませんより安全。

答え2

あなたはしません持つ到着しかし、少なくともエージェントメモリにロック解除されたキーがなく、あまりにも多くのエージェントを残さないことを確認したいと思います。

これを行うには、次の操作を行います。

  • ssh-agent -t 1800限られた時間(30分のタイムアウトから始まるとき、またはssh-add -t 1800キーを追加するとき)の間だけキーをメモリに保存するようにエージェントに指示します。
  • ログアウト時にエージェントにすべてのキーを削除させる(ssh-add -Dログアウトスクリプトから)。
  • ログイン時にエージェントがすでに実行されていることを確認し、新しいエージェントを起動するのではなく、そのエージェントを使用してください。これを行う1つの方法があります。
# .bashrc
start_ssh_agent() {
        if [ -e ~/.agent ]; then
                . ~/.agent
        fi
        ssh-add -l > /dev/null 2>&1
        if [ "$?" = "2" ] ; then
                # agent not running, start it
                ssh-agent -t 3600 |grep -v ^echo > ~/.agent
                . ~/.agent
                echo "Started SSH agent with PID $SSH_AGENT_PID"
        fi
}
start_ssh_agent

もちろん他の方法もあります。特に、プロキシソケットへの固定パスを使用できます。たとえば、参照してください。すべての端末でssh-agentを操作する方法は?

一方、誰かがSSHエージェントからキーを取得できる場合(つまり、プロセスのプログラムメモリを読み取ることができる場合)、他のタスクも実行できます。タイムアウトを無効にするために設定を変更したり、ssh-addキーとパスワードのコピーを送信する修正プログラムをインストールしたりすることができます。

関連情報