接続時に現在接続されているクライアントの環境変数をtmuxセッションに渡す方法

接続時に現在接続されているクライアントの環境変数をtmuxセッションに渡す方法

私はプレーンテキストSSH ptyでリモートで作業するとき(主に)tmuxを使います。接続が切断された場合に非常に便利です。私は長い時間(数時間から数日)コンピューティングタスクを実行し、それを確認するために他のリモートホストから接続します。これが私がtmuxを使用するほとんど唯一の用途です。私は専門家から離れているので、私の質問はおそらくとても簡単です。しかし、答えが見つかりません。

$SSH_CONNECTION現在のクライアントコンピュータのデーモンと何らかの方法で(Sshトンネルなしで直接)通信するために、シェル変数からクライアントアドレスを読み取って解析するコマンドがホストコンピュータにあります。もともと別のコンピュータで開始されたセッションに接続すると、tmuxで問題が発生します。 tmuxセッションの最下位シェルは起動時にこの変数をキャプチャし、クライアントシステムのアドレスを持ちます。始める会議自体ではなく、会議現在接続済みそれに。

簡単な解決策は、tmux.bashrcセッションでこの変数を完全にリセットして、ツールがtmuxセッション内のクライアント接続と通信しないようにすることです(最終的に失敗した場合は、コマンドラインからツールを提供できます)。 1つのIPを推測してください)。私は$TMUX.bashrcでIPアドレスを完全にキャプチャするのを避けるためにenv変数の存在に頼ることができると思います。

しかし、正しい方法は、tmux attachコマンドを実行するbashでこの変数を何とか増やすことです。リモートのtmuxがすでに実行されている最初のシェルの環境を変更できない可能性があるため、完全に自動化することはできません。しかし、クールなtmuxスクリプトを使用してtmuxコマンドを実行するプロセスから環境変数を抽出しattach(付属のSSHセッションマシンが環境に正しく設定されている)、セッションtmux変数のどこかに値を保存できます(存在するかどうか)。export SSH_SESSION=....;

簡単に言うと:tmux attach経験豊富なtmuxerのように、面倒を最小限に抑えながら、コマンドを実行している他のpty接続の環境変数の値に基づいて接続されたセッションで環境変数を設定する方法が必要です。


1 これは悪い、または安全なアプローチではありませんが、実際にはそうです。私たちは、科学コンピューティングで同僚の科学者が書いた奇妙なことをたくさん使うべきです。この場合のように、必ずしも良いソフトウェアエンジニアではありませんでした。今世紀には違うようにしたいのですが、この製品は30年になりました。

答え1

SSH_CONNECTIONはデフォルトで更新環境にあるため、接続時にセッション環境で更新され、次のようにtmux内で実行されているシェルにコピーできます。

eval $(tmux showenv -s SSH_CONNECTION)

関連情報