SSH
tmux

tmuxで大量のサーバーを操る最高の方法

More than 5 years have passed since last update.

こんにちはこんにちは

私は日々大量のサーバーで作業をする必要があるので tmux が欠かせません

そんな中最高便利な記事が先日公開されました

Tmuxでウィンドウをインタラクティブに移動する - Qiita [キータ]

しかしこの記事が全く話題になっていません

おそらく理解されていないのだと思います

ということで私がもう少し詳しく説明したいと思います

先程の記事と同様に

の合計 3 記事を組み合わせて初めて達成できる最高のソリューションを紹介します


tmux のウィンドウの名前

tmux で大量のウィンドウを立ち上げて ssh しているとどのウィンドウがどこのホストにいるのか分からなくなります

そこで先程紹介した 2 記事です

例えばサーバーが a0, a1, b0, c0 のようにアルファベット一文字+数字 1 桁のような命名規則であった場合は .ssh/config を以下のようにします


ssh-config

Host a? b? c?

PermitLocalCommand yes
LocalCommand tmux rename-window %n

このようにすると ssh した際に tmux のウィンドウの名前がサーバーのホスト名に変わります

Host * のようにすると git pull など全く関係ないところで動くのでパターンを使って確実にサーバーのホストにだけ当てるのがポイントです


select-window で確実に指定ホストに移動する

tmux のウィンドウの名前にホスト名を表示できるようにしても,結局指定ホストに移動するには choose-window などを使って選ぶしかありません

choose-window はデフォルトで bind-key w で見れますが,とはいえ量が多いと大変手間です

ここで select-window の登場です

Tmuxでウィンドウをインタラクティブに移動する - Qiita [キータ]

この記事の通り,適当なキーバインドで select-window を使えるようにします


tmux.conf

unbind-key s

bind-key s command-prompt "select-window -t '%%'"

元から bind-key s に割り当てられているものを調べたい場合は以下の記事のように list-keys を使います

tmux のキーバインドを調べる方法 - Qiita [キータ]

このように設定することで ウィンドウの名前を直接指定してそのウィンドウに移動ができます

実例を見せます

tmux-select-window.gif

サーバー a0, a1, b0, c1 にログインしている状況で現在 b0 で作業しています

そこで bind-key s[Enter] a0 と入力するだけで a0 に移動することが出来ます

最初に紹介した手法を使えば ssh するだけでウィンドウの名前を確実にホスト名に変えておいてくれます

また頭文字数文字を打つだけでも名前が一つに限定できるならそのウィンドウに移動することが出来ます

bind-key , を使えばウィンドウの名前は変えられるのですぐに飛びたい特殊なウィンドウにはユニークな名前を付けるのも良いと思います

今回は 4 つだけでしたが,これが画面に収まる量を超えるとこれがないと作業が極めて困難になります

一つ一つの威力は小さいですが,紹介した 3 つ全てを組み合わせるとかなり強力な味方になってくれると思いますので皆さんも是非試してみてください!

最高便利!!