tmuxで複数サーバーの同時操作

本番環境同様にサーバー複数台でLB通してアクセスの来るステージ環境でサービスのある挙動のログを見たい時があった。

tailfでログ流しながら確認したいけどどのサーバーに来るかわからんと。

そのため全台確認するために同時操作がしたい。

とりあえず「tmux 複数サーバ」で検索して一番上に来たこの記事を参考にログインユーザー指定のオプションと使い方を追加したシェルスクリプトをつくってみた。

#!/bin/bash

usage(){
    echo './multi_ssh.sh [-u username] host ...'
}

while getopts "hu:" opts
do
  case $opts in
    h)
      usage
      exit
      ;;
    u)
      usr=$OPTARG 
      ;;
  esac
  shift
  shift
done

if [ -z "$usr" ];then
    usr=`whoami`
fi

if [ -n "$SESSION_NAME" ];then
    session=$SESSION_NAME
else
    session=multi-ssh-`date +%s`
fi
window=multi-ssh

### tmuxのセッションを作成
tmux new-session -d -n $window -s $session

### 各ホストにsshログイン
# 最初の1台はsshするだけ
tmux send-keys "ssh ${usr}@${1}" C-m
shift

# 残りはpaneを作成してからssh
for i in $*;do
    tmux split-window
    tmux select-layout tiled
    tmux send-keys "ssh ${usr}@${i}" C-m
done

### 最初のpaneを選択状態にする
tmux select-pane -t 0

### paneの同期モードを設定
tmux set-window-option synchronize-panes on

### セッションにアタッチ
tmux attach-session -t $session

おっしゃ、やりたいことはできた。

まあ、こんなみんな考えそうなことは誰かしらやってるわけで、見つけてしまいましたよ…

tmux-csshで複数サーバに対するカジュアルなオペレーション

brew installするだけのかんたんなお仕事でした。 車輪の再発明ってやつでしたかね。。。