web-dev-qa-db-ja.com

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

私は自分のローカルマシンで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
    \_ ...

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

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

(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設定が必要なことですが、それは問題にはなりません。

34
lilorox

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

ssh <remote Host> -t tmux attach-session

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

18
m__

主な問題が、新しいウィンドウを開くたびに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実行するホストに尋ね、そのホスト専用のセッションを開始します。

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

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

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

2
somay

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

1
untore

リモートシェルといえば、そこでコマンドを実行できる、つまり直接アクセスできるということです。この場合、各リモートウィンドウでssh接続を使用するだけで済みます。

あなたはそこに何かを伝えることができます:

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

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

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

0
outoftime