web-dev-qa-db-ja.com

マシンの再起動中にSSHエージェントがIDを失う

デフォルトの場所にid_rsaという名前のキーを作成した後。コマンドssh-add ~/.ssh/id_rsaを使用してSSHエージェントにIDを追加しています。正常に追加されています。

すでにSSHAgentを使用しているので、キーのパスフレーズを入力せずにSSHできます。

しかし、マシンまたはサーバーを再起動してから、コマンドssh-add -LでIDを確認すると、The agent has no identitiesのようなメッセージが表示されます。

これは、マシンを再起動するとエージェントがIDを失ったことを意味しますか?これは正常な動作ですか、それとも私がここで見逃しているものですか?

私を案内してください、私はSSHにあまり精通していません。

12
Niks

それは正常です。キーエージェントの目的は、復号化されたキーを保持することだけですメモリ内が、ディスクに書き込むことはありません。 (これは目的を無効にします。代わりにメインキーの保護を解除しないのはなぜですか?)

したがって、ログインのたびにキーのロックを解除する必要があり、これを自動化する必要があります。Linuxではpam_sshを使用するのが1つのオプションです。自動的にOSパスワードを使用エージェントのロックを解除します。別の同様のモジュールはpam_envoyで、これは少し信頼性の高いafaikです(ただし、systemdが必要です)。

両方のモジュールがエージェント自体を起動し、キーを自動的にロードします。

12
user1686

OS Xでは、ssh-addに特別なフラグがあり、秘密鍵をそこに格納する場合にキーチェーンに接続します。

ただ走れ ssh-add -K ~/.ssh/id_rsa

これはあなたの質問にもっと完全に答えると思います。このOSX固有のフラグは、ドキュメントを見つけるのが難しいですが、少なくともOS XLeopard以来機能しています。

2
Olivier Lacan

これを試して〜/ .bashrc

if [ ! -S ~/.ssh/id_rsa ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/id_rsa
  ssh-add
fi
export SSH_AUTH_SOCK=~/.ssh/id_rsa

これは、ログインした後にのみパスワードの入力を求める必要があります。

2
Shiro

このソリューションは、sshキーがパスフレーズで保護されている場合に便利です。

上記のすべての回答の問題は、秘密鍵がパスフレーズで保護されている場合、新しい端末を起動して秘密鍵を使用しようとするたびに、パスフレーズを入力する必要があり、ssh-agentの複数のコピーを実行することになります。メモリ内。解決策は、~/.bashrcまたは~/.zshrcに以下を追加することです。

##### START Fix for ssh-agent #####
# Ref: http://mah.everybody.org/docs/ssh

SSH_ENV="$HOME/.ssh/environment"

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
     echo succeeded
     chmod 600 "${SSH_ENV}"
     . "${SSH_ENV}" > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
     }
else
     start_agent;
fi
##### END Fix for ssh-agent #####

これにより、端末を起動したときにssh秘密鍵のパスフレーズが1回だけ要求されます。その後、新しいターミナルセッション(またはtmux seesions)を開くと、上記のスニペットで作成されたssh-agentが再利用されます。

参照

0
GMaster