web-dev-qa-db-ja.com

リモートサーバー、iTerm2、およびtmuxの統合

リモートサーバーでtmuxセッションを開始し、ローカルマシンでiTerm2のネイティブウィンドウと分割画面を使用できるようにしたいと考えています。

たとえば、リモートサーバーで、2つのペインを持つ1つのウィンドウでtmuxセッションを実行しているとします。ローカルマシンのiTerm2に、各ペインに異なるtmuxペインが含まれるように、2つのネイティブiTerm2ペインが必要です。

これは可能ですか?

(私はその逆が可能であることを知っています—これにより、ローカルマシンでtmuxセッションを実行でき、別のマシンでは、たとえばiTerm2タブがウィンドウとして表示されます。しかし、これは一種の役に立たないようです。)

30
Nick

はい、可能です。次の点を確認してください。

  • Tmuxの最新バージョンをリモートでインストールする
  • 最新バージョンのiterm2がローカルにインストールされている

ssh login@hostname -t 'tmux -CC'およびvoilà経由でログインします。これにより、リモートボックスにログインしているローカルボックスのiTerm2ウィンドウが開きます。

40
user2046612

以下は、私にとって有効なものであり、2015-12-16の安定リリースバージョンであり、OS X 10.11.2ではiTerm 2.1.4、Raspbian Linuxではtmux 1.9です。

  1. まず、ローカルマシンで.ssh/configを使用し、リモートマシンで.ssh/authorized_keysを使用して、リモートシステムへのパスワードなしのログインを設定します。これが適切に設定されると、ssh piを実行するだけでログインできるようになります(piがリモートシステムのホスト名であるとします)。

  2. ローカルシェルにログインするのではなく、ssh piを呼び出すだけでリモートマシンにログインする新しいiTerm2プロファイルを作成します。これを構成するには、次のように移動します:Preferences/Profiles/+/Command.Command = "ssh pi"

  3. 次のようにして、新しいプロファイルからリモートマシンへのiTerm2ウィンドウを開きます。

  4. ITerm2リモートログインウィンドウのコマンドラインで、tmux -CCを実行します。この後、iTerm2ウィンドウにtmuxコマンドモードが表示され、tmuxが新しいセッションを作成し、iTerm2がそのtmuxセッション用の新しいiTerm2ウィンドウをすぐに作成します。その新しいiTerm2ウィンドウ内の最初のiTerm2タブは、そのセッションの単一のtmux windowを表します。 CMD-Tを実行すると、新しいtmuxウィンドウを表す新しいiTerm2タブが作成されます。

これをどのように使用しますか?

  • この時点で、「シェル/ tmux /ダッシュボード」を実行して、既存のtmuxセッションとウィンドウに関するiTerm2の理解を観察できます。

  • Tmuxセッションを表すiTerm2ウィンドウを閉じると、基になるセッションとすべてのtmuxウィンドウが強制終了されます。

  • Tmuxコマンドモードが表示されているiTerm2ウィンドウを閉じると、そのセッションに接続されていたtmuxクライアントインスタンスが強制終了されたように見えるため、両方のiTerm2ウィンドウが非表示になりますが、tmuxセッションは引き続き有効であり、再度接続できます。それ。

  • Tmuxからより整然とした分離が必要な場合は、tmuxコマンドモードウィンドウ内でESCを実行します。

  • 新しいtmuxセッションを作成する代わりに、本来必要なのは既存のセッションにアタッチすることだった場合は、tmux -CC attachを使用してそれを行うことができます。

理論的には、リモートシステムに接続したときに既存のtmuxセッションに自動的に接続されるようにiTerm2またはtmuxを構成する方法があるはずですが、コマンドラインを変更しても機能しませんでした。 iTerm2プロファイル。

4
algal