tmuxセッションをリモートマシンに接続する


31

ローカルマシンでtmuxを使用していますが、通常は同時に複数のセッションがあります。

私が普段やっていることは、ローカルで動作する異なるウィンドウのセッションと、セッションごとに複数のウィンドウを1つのホストに接続する他のセッションがあることです。

セッション/ウィンドウツリーは、私がtmuxを日常的に使用する場合、次のようになります。

(TMUX on my local machine)
 |
 +- session 1: local
 |  \_ window 1: local shell
 |  \_ window 2: local shell
 |  \_ ...
 |
 + session 2: somehost
 |  \_ window1: ssh user@somehost
 |  \_ window2: ssh user@somehost
 |  \_ ...
 |
 + session 3: someotherhost
    \_ window1: ssh user@someotherhost
    \_ window2: ssh user@someotherhost
    \_ ...

セッション2とセッション3を、somehostとsomeotherhostで作成されたtmuxセッションに接続する何らかのリモートセッションにする方法はありますか?

上記のツリーは次のようになります。

(TMUX on my local machine)
 |
 +- session 1: local
 |  \_ window 1: local shell
 |  \_ window 2: local shell
 |  \_ ...
 |
 + session 2 linked to an existing session on somehost
 |  \_ window1: shell on somehost
 |  \_ window2: shell on somehost
 |  \_ ...
 |
 + session 3 linked to an existing session on someotherhost
    \_ window1: shell on someotherhost
    \_ window2: shell on someotherhost
    \_ ...

私はこのトピックを見つけましたが、これが私が何をしたいのかわかりません:ホスト間でtmuxソケットを共有することは可能ですか?

私が探しているのは、ローカルマシンsomehostとsomeotherhostで同じtmux構成を持っている必要があると思いますが、それは問題ではないでしょう。


これに対する回避策を見つけましたか?ローカルのように管理できるリモートセッションを
用意

回答:


18

リモートホストに接続するときに、sshにコマンドを渡すことができます。リモートtmuxセッションに接続するための-tオプションを含めますtmux attach-session

ssh <remote host> -t tmux attach-session

sshを介したtmuxセッションへの接続に関するこの投稿では、それについてさらに詳しく説明します。


18
これは、ネストされたセッションを提供するだけではありませんか?OPがやろうとしているのは、リモートセッションをローカルセッションと一緒に表示して、1つのtmuxのchoose-window / choose-tree内でナビゲートできるようにすることです。
stsquad

リモートホストに複数のセッションが接続されている場合は、次を使用できます
。ssh

私が遭遇した問題とステップバイステップを修正するためにいくつかの編集を行いました。ピアレビューがまもなく終了することを願っています。これは働いていたssh <remote host> -t /path/to/tmux a -t <my-session-name>必要な、余分な-t
マーリン

OPと同じ質問があります。これは私の質問に答えません。ネストされたtmuxセッションを作成し、そのセッションに送信するすべてのtmuxコマンドを二重にエスケープする必要があります。ローカルセッションのように、リモートセッションがセッションリストに表示されるものが必要です。
Omnifarious

2

主な問題が、ssh remotehost新しいウィンドウを開くたびに入力する必要があることである場合、default-commandセッションオプションが回避策である可能性があります。

設定したセッションで新しいウィンドウを開くと、指定したコマンドが自動的に実行されます。

の簡単な設定.tmux.conf

bind-key C-r new-session ssh remotehost \; set-option default-command "ssh remotehost"

このキーバインドCtrl-rは、新しく開かれたすべてのウィンドウが最初に実行ssh remotehostされる新しいセッションを作成します。

以下の設定を使用して、セッション作成時に接続するホストを選択できます。

bind-key C-r command-prompt "new-session -s %1 ssh %1 \; set-option default-command \"ssh %1\""

これsshは、各ウィンドウの作成ではなく、各セッションの作成時に実行するホストを尋ね、そのホスト専用のセッションを開始します。

sshssh configでSSH多重化を有効にすると、多数の実行に少し時間がかかります。以下に.ssh/config例を示します。

Host remotehost
    ControlMaster auto
    ControlPath ~/.ssh/mux-%r@%h:%p
    ControlPersist 10

このtmux設定は、リモートホストにtmuxセッションを作成しないことに注意してください。ssh接続が失われた場合、影響を受けるtmuxウィンドウは戻りません。


1

socatのようなツールを使用して、tmuxが使用するUNIXドメインソケットをローカルマシンにトンネルすることができます。しかし、実際にはトンネル(ssh)を別のトンネル(socat)に交換しているだけなので、実際にはあまり良くなく、安全でもありません。


たぶんトンネルsocat経由ssh?🙂
Omnifarious

この時点でtmate、リモートtmuxの処理のための最適なツールであるかもしれない
untore

0

リモートシェルについて話す場合は、そこでコマンドを実行できる、つまり、直接アクセスできるという意味です。この場合ssh、リモートウィンドウごとに単純に接続を使用できます。

次のように伝えることができます:

「ねえ、しかし、各リモートサーバーに複数のウィンドウを持つ方法はありません!」

sshの制限により、それは事実です。ただし、各リモートサーバーでtmuxセッションを開始できます。注:この場合Ctrl+b、衝突を防ぐためにローカルマシンでデフォルトを再バインドする必要があります。

またtmuxinator、を使用することをお勧めします。少なくとも毎日tmuxセッションをリトリートする場合、これは非常に役立つツールです。

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