LoginSignup
15
10

More than 3 years have passed since last update.

ssh + iTerm2 tmux統合で切断しても再開できるリモート環境を作る

Last updated at Posted at 2020-03-02

概要

※※普段からtmuxでデタッチ/アタッチしてる人は読まなくて大丈夫かも※※

ssh越しにiTerm2のtmux統合を使うと、リモートのtmuxが手元のMacのiTerm2上でネイティブに動作しているように動きます。
また、普段のtmuxと同じようにデタッチしてアタッチすることも可能なので、MacBookなどで気軽にノートを閉じてssh接続を気軽切ってしまっても途中から再開できるようになります。

デタッチして切断してアタッチまでを動画にしました。

利点

iTerm2のtmux統合の利点は https://www.iterm2.com/documentation-tmux-integration.html に説明がありますが、
翻訳を載せておきます。

通常、tmuxを使用すると、複数の仮想ウィンドウが単一の「物理」ウィンドウに表示されます。tmuxにコマンドを発行して、環境を操作できます。これにはいくつかの問題があります。

  • コマンドモードに入るには、一部のキーストロークをtmux専用にする必要があります(^ B、デフォルトでは、emacsまたは対話型シェルでカーソルを左に移動することは難しくなります)。
  • tmuxセッションのウィンドウの複数のビューを取得するには、リモートホストに複数回sshする必要があります。
  • tmuxコマンドを学ぶ必要があります。
  • 分割ペインを調整するには、マウスのレポートを有効にする必要があります。
  • ターミナルエミュレータの一部の組み込み機能は、tmuxを使用していない場合と同じように機能しません。たとえば、通常のターミナルウィンドウでは、tmuxのスクロールバック履歴に簡単にまたはすばやくアクセスできません。また、tmuxの検索機能は、iTerm2の検索機能ほど優れていません。

多くのユーザーにとって、ターミナルマルチプレクサーは優れた動作方法ですが、欠点を受け入れたくありません。
iTerm2のtmux統合はこれらの問題を解決します。
tmux -CCを実行すると、新しいtmuxセッションが作成されます。iTerm2ウィンドウが開き、通常のiTerm2ウィンドウのように機能します。違いは、iTerm2が終了するか、sshセッションが失われると、tmuxが実行し続けることです。sshされたホストに戻り、tmux -CC attachを実行すると、iTerm2ウィンドウが以前と同じ状態で再び開きます。いくつかのユースケースが思い浮かびます:

ほとんどの作業をsshで行うユーザーの場合:

  • 家に帰ったときに職場で持っていた環境を復元します。
  • システムアップデートの再起動を心配する必要はもうありません!

すべての人のために:

  • 2人が同じtmuxセッションにアタッチすることにより、別のユーザーと共同作業します。

必要なソフト

設定

iterm2

  • Preferences -> General -> tmux
    チェックボックス3つとも有効にする。
    Open tmux windows as:Native tabs in a new windowsに設定する。
    image.png

  • Preferences -> Profiles -> General
    Commandssh -A -t <接続ホスト名> 'tmux -CC new -A -s main' を記載する
    image.png

  • Preferences -> Advanced -> Experimental Features
    Allow variable window size in tmux integgrationYesに。
    image.png

tmux

リモートLinux側の ~/.tmux.confへ以下の設定を入れることでtmuxウィンドウのタイトルをiTerm2タブ/ウィンドウのタイトルとして表示される

~/.tmux.conf
set-option -g set-titles on
set-option -g set-titles-string '#T'

ssh再接続時のagent forwardのsocketファイルををなんとかする

ssh先のtmuxでssh-agentの接続が切れてしまう問題の回避する

リモートLinux側の .bashrcへ以下を追加することで、再接続にtmuxでもssh agent forwardingが正常に動作するようになる

~/.bashrc
[[ $SSH_AUTH_SOCK != $HOME/.ssh/sock && -S $SSH_AUTH_SOCK ]] \
    && ln -snf "$SSH_AUTH_SOCK" "$HOME/.ssh/sock" \
    && export SSH_AUTH_SOCK="$HOME/.ssh/sock"
15
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
10