まず、混乱を予想してください。これは実際に一般的なtmuxの質問と反対の質問です。
SSHトンネルが失敗してもtmuxセッションが漏洩しないようにする方法同じSSHセッションで複数のシェルを実行しているときに1つの端末でセッションとtmuxインスタンスを完全に終了すると、他の端末からtmuxインスタンスが漏洩する可能性があります。たとえば、いくつかの背景ウィンドウに隠されたリソース消費プロセスを終了することを忘れた場合、これはあらゆる種類の問題を引き起こす可能性があります。クールではありません。
私はtmuxをほとんど排他的に端末エミュレータとして使用し、「分離」機能はほとんど使用しません。端末の単一のSSHセッションを介して同じシステムにアクセスする複数のtmuxインスタンスを持つことは珍しいことではありません。バックグラウンドプロセスを実行するには、disown
シェルから要求するか、systemdで実行します。残念ながら、私が毎日使用しているシステムの多くはsystemdにアップグレードされておらず、近いうちにアップグレードされる可能性が低いため、これはKillUserProcesses
オプションではありません。
理想的には、コマンドラインスイッチを使用してtmuxを呼び出してバックグラウンドで実行されるのを防ぎ、エイリアスをtmux
。
どのSSHトンネルですか?
1つのOpenSSH接続は複数のセッションを提供します。
どのtmuxセッションですか?
SSHセッションごとに1つずつ別々のtmuxインスタンス。
どんな漏れ?
tmux インスタンスのリーク。例:SSH経由でマシンに接続します。同じ接続で別のシェルセッションを開始します。各SSHセッションでtmuxインスタンスを起動します。これで2つのtmuxインスタンスが作成されました。あるセッションでtmuxを停止し<C-d>
た後(再度)、SSH接続を停止します<C-d>
。他のSSHセッションは閉じられますが、そのセッションで実行されているtmuxインスタンスとすべての子プロセスが漏洩します。
説明してください:(1)現在どのような設定がありますか?
在庫OpenSSH、在庫tmux、いくつかのシェル。ほとんどリバースSSH接続 勝手に作り直すことはできませんが、関係ありません。
(2) 何を防止したいのか?
プロセスは他の tmux セッションでアクティブのままです。
これはSSHを介して接続された別のボックスなので、目的は、接続が終了した後に単一のtmuxインスタンスがアクティブに保たれるのを防ぐことです。そして分割ウィンドウと背景ウィンドウをたくさん使うので、子プロセスをぜひ集めてみたいです。
答え1
新しいセッションにssh
ログを記録するときにtmux attach -d || tmux new
既存のtmux
セッションを追加したり、セッションがない場合は新しいセッションを作成するtmux
などの方法を使用できます。これにより、接続が失われたときにtmux
セッションがssh
バックグラウンドで実行されるのを防ぐことはできませんが、これらの破棄されたセッションが累積するのを防ぎます。
答え2
以下を使用すると、問題を完全に回避できると思います。モシュ。
Moshは断続的な接続をサポートし、mosh-server
接続が正しく切断されていない場合(たとえば、サーバーから切断された場合にクライアントを強制的に閉じるなど)にのみインスタンスが漏洩します。