要塞ホストの画面またはtmuxでのssh-agentキーのタイムアウト


8

通常、私はssh-agentを実行しています。要塞ホストにsshしてから、tmuxセッションを開き、それを介して他のボックスに接続します。キー転送は、それ以降に開いたすべてのセッションで機能します。

ターミナルを閉じてラップトップをスリープ状態にした後でtmuxセッションを再開した場合、要塞セッションでのキー転送は新しいセッションでの転送と同様に機能します。ただし、既存のものは機能しません。

私のbashrcには、tmuxを再開したときにキーフォワーディングが機能し続ける小さなものがありますが、tmux内で開いているセッションで機能し続ける方法を理解するのに苦労しています。

たとえば、bastion01、dbhost01、dbhost02、webhost01、およびwebhost02があります。

bastion01への接続を開くと、そこでtmuxを起動してから、dbhost01に接続すると、webhost01の転送が機能します。その接続を閉じ、既存のtmuxセッションに再接続して接続し、dbhost02とwebhost02に接続を追加すると、キー転送は02ボックスでは機能しますが、01では機能しません。

助けてください!

回答:


11

にsshを実行するたびにbastion01、キー転送を処理するために異なるソケットが開かれます。ファイル名は環境変数で確認できますSSH_AUTH_SOCK。を起動するtmuxと、その環境変数の値がtmuxのグローバル環境に含まれ、そのセッションで起動されたすべてのシェルによって継承されます。

これで、bastion01後で再接続すると、キー転送を処理するために別のソケットが割り当てられます(新しいsshセッションであるため)。これSSH_AUTH_SOCKを確認するには、tmuxセッションに再接続する前と後の値を調べます。内部tmuxでキー転送を機能させるには、SSH_AUTH_SOCKinside の値をtmux現在のsshセッションで使用されているソケットの名前に更新する必要があります。

これをすばやく簡単に行う方法は、この新しい値をファイルに保存する短いスクリプトを記述し、それを元のtmuxウィンドウ内で実行することですssh

#!/bin/bash

echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.auth_ssh

にsshした直後にbastion01、ただしtmuxセッションに再接続する前に、そのスクリプトを実行します。次に、内部からsshを試みる前にtmux、次のコマンドを実行します。

source ~/.auth_ssh

tmuxウィンドウには独自の環境があるため、sshを実行しようとする各ウィンドウでそれを実行する必要があります。簡単にするために、sshに別名を付けて実行することができます。

alias ssh="source ~/.auth_ssh; ssh"

注:これは、SSH認証情報を更新するために職場で使用するスクリプトを大幅に簡略化したものです。それが正しく機能しない場合は、少なくともこれがより良いソリューションをググるのに十分な情報を提供することを願っています(または他の誰かがここにより良いソリューションを投稿します)。

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