通常、私はssh-agentを実行しています。要塞ホストにsshしてから、tmuxセッションを開き、それを介して他のボックスに接続します。キー転送は、その時点から開いたすべてのセッションで機能します。
ターミナルを閉じてラップトップをスリープ状態にした後でtmuxセッションを再開した場合でも、要塞セッションでのキー転送は、他のnewセッションでの転送と同様に機能します。ただし、既存のものは機能しません。
Bashrcには、tmuxを再開したときにキー転送が機能し続けることが少しありますが、tmux内で開いているセッションでキー転送を機能させ続ける方法がわかりません。
たとえば、bastion01、dbhost01、dbhost02、webhost01、およびwebhost02があります。
Bastion01への接続を開くと、そこでtmuxを起動してから、dbhost01に接続するとwebhost01の転送が機能します。その接続を閉じ、既存のtmuxセッションを再接続して接続し、dbhost02とwebhost02に接続を追加すると、キー転送は02ボックスでは機能しますが、01では機能しません。
助けてください!
bastion01
にSSHで接続するたびに、キー転送を処理するために異なるソケットが開かれます。ファイル名は環境変数SSH_AUTH_SOCK
で確認できます。 tmux
を開始すると、その環境変数の値はtmux
のグローバル環境に含まれ、そのセッションで開始されたすべてのシェルに継承されます。
これで、後でbastion01
に再接続すると、キー転送を処理するために別のソケットが割り当てられます(これは新しいsshセッションであるため)。これは、tmux
セッションに再接続する前と後にSSH_AUTH_SOCK
の値を調べることで確認できます。キー転送がtmux
内で機能するためには、tmux
内のSSH_AUTH_SOCK
の値を現在のsshセッションで使用されているソケットの名前に更新する必要があります。
これを行うための手っ取り早い方法は、この新しい値をファイルに保存する短いスクリプトを記述し、それをtmux
- ingになる任意のssh
ウィンドウ内で実行することです。から。
#!/bin/bash
echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.auth_ssh
bastion01
にSSHで接続するとすぐに、ただしtmuxセッションに再接続する前にそのスクリプトを実行します。次に、tmux
内からどこかでsshを実行する前に、次のコマンドを実行します。
source ~/.auth_ssh
各tmux
ウィンドウには独自の環境があるため、sshを実行しようとする各ウィンドウでそれを実行する必要があります。簡単にするために、sshにエイリアスを付けてそれを行うことができます。
alias ssh="source ~/.auth_ssh; ssh"
注:これは、SSH認証情報を更新するために作業で使用するスクリプトを大幅に単純化しすぎたものです。それが完全に正しく機能しない場合、私はこれが少なくともあなたにもっと良い解決策をグーグルするのに十分な情報を与えることを願っています(または誰かがここにもっと良い解決策を投稿します)。