シェルセッションにSSHキー(パスワードを含む)を個別に追加しないでください。

シェルセッションにSSHキー(パスワードを含む)を個別に追加しないでください。

.<name of shell>rc注:この特定のSSHキーにはパスワードがあり、パスワードを入力し続ける必要がないため、ここに数行を追加しても問題は解決されません。

ssh-agentだから私はそれが後ろでどのように機能するのか本当に理解していません。私はいくつかのリモートリソースにアクセスするためにキーを追加する必要があるたびにとssh-agentを使用します。ssh-add ~/.ssh/id_rsaキーを一度追加したので、同じ「シェルセッション」に対して再度追加する必要はありません(「シェルセッション」はおそらく適切な用語ではありません)。

残念ながら、新しいシェルセッションを作成し続けています。私はOS Xのtmuxでzshを実行しており、創造的な名前のssh keyを持っていますid_rsa。 SSHキーにはこれに関連するパスワードがあります。

新しいシェルを起動するたびに、次のことを行う必要があります。

$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa
<type password>

これは本当に迷惑なことです。

ssh-agent環境変数の出力がSSH_AGENT_PID毎回異なることがわかりました。私の直感は、この環境変数がSSH_AUTH_SOCK単一のシェルセッション内でキーを再追加する必要がない理由です。プログラムを呼び出すと、sshこれらの環境変数を使用して通信し、ssh-agent認証が成功します。

ssh-agentセッション間でsを共有する方法があるかどうか疑問に思います。おそらく正しい方法は、SSHキーを追加してtmux起動する前に環境変数を保存するtmuxように設定することです。本当によくわかりません。この問題を解決する標準的な方法は何ですか?SSH_AUTH_SOCKSSH_AGENT_PID

ベストアンサー1

ssh-agentがどのように機能するかは、セッションごとに1つのエージェントがあることです。エージェントはセッションを開始して終了します。

セッションは、端末を開いたりシェルを起動したりするのではなく、ログインしたときに開始されます。ssh-agentこれをシェル起動スクリプトの一部として体系的に実行するのは間違いなくエラーです。

私はOSXユーザーではないため、何かが欠けている可能性がありますが、私が理解したのは、古代のOSXバージョン(10.5ベース)では、SSHがOSXキーチェーンと統合されていることです。したがって、ssh-agentまったく走ってはいけません。このSSH_AUTH_SOCK変数はlaunchdソケットを指す必要があります(launchdはsshプロキシサービスを提供します)。バラよりSSHキーでMac OS Xキーチェーンを使用するには?そしてsshがSnow Leopardのssh-agentに自分のキーを追加しないようにするにはどうすればよいですか?

何らかの理由でこれに固執し、ssh-agentすべてのセッションに1つのプロキシを使用したい場合(これは合理的)、SSHソケットに固定パスを使用できます。 (私はWindowsでこれを行いました。)あなたのパスで固定パスを.profile設定し、まだ実行されていない場合は始めます。SSH_AUTH_SOCKssh-agent

export SSH_AUTH_SOCK=~/.ssh/auth_sock
if ! fuser "$SSH_AUTH_SOCK" >/dev/null 2>/dev/null; then
  # Nothing has the socket open, it means the agent isn't running
  ssh-agent -a "$SSH_AUTH_SOCK" -s >~/.ssh/agent-info
fi

私のコードはプロキシを終了しようとしません。ログアウト時にエージェントを終了するには、ログアウトスクリプトにkillディレクティブを追加します。もちろん、ユーザーとして実行されているすべてのプロセスを終了すると、エージェントも含まれます。

おすすめ記事