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


12

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

SSHエージェントを使用しているため、キーのパスフレーズを入力せずにSSHを実行できます。

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

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

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


Unix&Linuxサイトでこのスレッドを参照してください。
janosdivenyi

回答:


12

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

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

どちらのモジュールもエージェント自体を起動し、キーを自動的にロードします。


Mac OSX端末で自動化する方法はありますか?
Niks

コマンドを実行すると、次の $SSH_AUTH_SOCK ような結果-bash: /tmp/ssh-gT43vE99vk/agent.511が表示されます。:許可が拒否されましたここで混乱しています。エージェント転送が機能しているかどうかを確認してください。
Niks

これは、コマンドとして使用するためのものではありません。変数であり、別のコマンドの一部として使用するものです。たとえばecho $SSH_AUTH_SOCK、その値を出力します。
user1686


2

〜/ .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

ログインすると、パスワードの入力を求められるだけです。


返信ありがとうございます。これは、SSHエージェントが適切に機能していることを意味します。これを追加すると、マシンを起動するたびにIDを追加する必要がなくなりますか?これがばかげた質問の場合は申し訳ありませんが、私はsshを非常に初めて使用しています。
Niks

sshキーにパスワードがある場合、ログインするたびにプロンプ​​トが表示されます。
Shiro

この答えは有害です。それが言うことをするなら、それはあなたの秘密鍵を削除します。認証する方法が他にない場合、公開鍵認証を使用していたシステムにアクセスできなくなります。
kasperd

2

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

実行するだけssh-add -K ~/.ssh/id_rsaです。

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


2
これが適切な答えであり、その後ssh-add -Aにキーチェーンのすべてのキーが追加されます。さらに、ここで説明~/.ssh/configするUseKeychain yesように、macOSが常にキーを保持するようにa とaddを作成します。unix.stackexchange.com
140075

私のMacBookは、再起動すると、これを試みた後でも、まだ自分のIDを忘れています。
ドミニクセイヤーズ2018年

0

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

上記のすべての回答の問題は、秘密鍵がパスフレーズで保護されている場合、新しい端末を起動して秘密鍵を使用しようとするたびに、パスフレーズを入力する必要があり、結果ssh-agentとしての複数のコピーが実行されることになります。メモリ。解決策は、以下を~/.bashrcor に追加することです~/.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秘密鍵のパスフレーズを要求します。その後、新しいターミナルセッション(またはtmux参照)を開くと、上記のスニペットによって作成されたssh-agentが再利用されます。

参照

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.