tmux で列数固定で window を分割して複数サーバに SSH する
日頃の業務で複数台のサーバにログインしてオペレーションすることがあると思うんですが、cssh, i2css, tmux-css, xpanes 等便利なツールがあるし、tmux 関連の簡易スクリプトだけでも次のように色々見つかります。
- もっと簡単に!tmuxで複数のサーバにSSH接続して同じコマンドを一気に送る | 三度の飯とエレクトロン
- tmuxで複数サーバの同時オペレーション – NaviPlus Engineers’ Blog
- tmux + ssh + Mackerel API を組み合わせたとにかくモダンなサーバオペレーション - ゆううきブログ
tmux は even-horizontal, even-vertical, main-horizontal, main-vertical, tiled という layout が用意されていて、どのスクリプトもこのいずれかを使っています。ところが、6 台を超えると tiled layout では列が 3 分割になって横幅が足りないことがあるし、even-vertical layout だと横のスペースがもったいないしで、横の分割数を固定にできないものかと前々から思っていました。
というわけで作った
最初は普段使っているツールに PR を送ろうかと思ったんですが、この程度の内容であれば一から自分で書いた方が融通も効いて良さそうだったので一から書きました。
次のような感じで PATH のとおったディレクトリに配置すると使えます。
curl -LO https://gist.githubusercontent.com/abicky/0760f604b06e9ec18a5354a8fd4d30c1/raw/76457c99edce6f064d981d2a2a5a03fc40be11b1/tmux-multi-ssh
chmod +x tmux-multi-ssh
--col
option に 2 を指定すれば列数 2 で良い感じに分割されます。
Usage: tmux-multi-ssh [-c COL] [-r ROW] [--ssh-option SSH_OPTIONS] HOST [HOST2 ...]
-c, --col int The number of columns
-h, --help Show this message
-r, --row int The number of rows
--ssh-option string Options passed to SSH
狭い画面で 8 台にログインしてもそれなりにスペースがあって良い感じですね!