ssh の後に tmux または screen を自動的に使用したいです。.ss/config にこれに役立つコードをいくつか記述しました。
# ~/.ssh/config
Match exec "[[ $(ps h o args p $PPID | wc -w) -eq 2 ]]"
RemoteCommand SESSION_NAME="debek"; tmux a -t ${SESSION_NAME} || tmux new -s ${SESSION_NAME} || screen -r ${SESSION_NAME} || screen -S ${SESSION_NAME}
RequestTTY yes
今のところ、問題が 1 つあります。ローカル コンピューターの 2 番目のターミナルから同じサーバーに接続したい場合、当然、同じセッション名「debek」に接続されます。SCREEN_NAME="debek-{RANDOM}"
この問題を回避するために一意のセッション名を設定することはできますが、たとえば接続が失われ、再度接続しようとすると、最後のセッション名に自動的に接続されるのではなく、新しいセッション名が作成されます。
この問題を解決する方法を何かご存知ですか?
答え1
できることはいくつかあります:
.ssh/config を使用する代わりに、ssh して tmux に接続するエイリアスを作成します。その後、ssh 時に各ターミナルから接続するかどうかを選択できます。
ホスト名のエイリアスを 2 つ作成し (/etc/hosts または DNS 内)、一方に接続してもう一方には接続しない場合にのみ tmux が実行されるように .ssh/config を構成します。
または をチェックするなどして、リモート コマンドがまだ tmux に接続されていない場合にのみ tmux に接続するようにします
tmux has 2>/dev/null && [ $(tmux lsc -t$SESSION_NAME|wc -l) -eq 0 ]
。tmux display -pt$SESSION_NAME '#{session_attached}'