現在実行中のssh-agentに接続する

現在実行中のssh-agentに接続する

エージェントが作成されると、親プロセスから自動的に分離されます。

someUser@MyPC:~$ eval "$(ssh-agent -s)"
Agent pid 10222
someUser@MyPC:~$ ps -e --forest | grep ssh-agent
  10222 ?        00:00:00 ssh-agent

別のエージェントを作成するために端末を閉じて新しい端末を開くと、2つのエージェントが実行されています。

someUser@MyPC:~$ eval "$(ssh-agent -s)"
Agent pid 10503
someUser@MyPC:~$ ps -e --forest | grep ssh-agent
  10222 ?        00:00:00 ssh-agent
  10503 ?        00:00:00 ssh-agent

一部の制御端末が閉じられるか終了しない限り、既存のssh-agentに接続できるコマンドはありますか?

答え1

起動すると、2ssh-agentつの環境変数が提供されます。そのため、エージェントを起動するにはコマンドが必要です。エージェントは変数を設定するためのシェルコマンドを出力し、そのコマンドが現在のシェルセッションで実行されるようにします。SSH_AUTH_SOCKSSH_AGENT_PIDeval "$(...)"eval

既存のプロキシに接続するには、SSH_AUTH_SOCK既存のプロキシのソケットを指すように環境変数を設定します。他の端末がそのファイルをインポートできるように、起動後に変数とその値をファイルに出力します。

たとえば、

eval "$(ssh-agent -s)"
echo "SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.ssh_auth_sock_info

次に、他の端末からプロキシ接続情報を取得します。

. ~/.ssh_auth_sock_info

繰り返しますが、このSSH_AGENT_PID変数にはエージェントのPIDが含まれているため、ログアウトスクリプトなどでそれを使用してエージェントを終了できます。

プロキシPIDを知っていてもソケットパスがわからない場合は、それを使用してソケットを見つけることができ、lsofそれを使用するために必要な権限を持っています。たとえば、実行中にsudo lsof -p 10222最初のSSHエージェントに対して開かれたファイルとソケットが表示されます。通常、ファイル記述子#3はプロキシソケットです。

関連情報