私は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つの潜在的な問題があります。
Kusanalandaが指摘したように、これは
ssh-agent
ログインするたびに異なるプロセスを作成し、プロセステーブルが少し混乱することを意味します。もっと深刻なのは、すべてのプロセスにあなたのやるメモリ内の秘密鍵です。攻撃者がシステムにアクセスして
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
キーとパスワードのコピーを送信する修正プログラムをインストールしたりすることができます。