SSH接続時にホスト名を付けたtmuxウィンドウを開く方法

いわゆる踏み台サーバを介して作業を行っている環境では、踏み台サーバ上で起動したscreenやtmuxの中で他のサーバにSSH接続しているケースが多いかと思います。

その場合、たくさんのサーバを管理していると下記のような煩わしさがあります。

  • 並行して作業を継続するにはsshコマンドを実行するウィンドウを新たに作る必要がある。
  • 複数のサーバに接続しているとステータスバーのウィンドウ名が「1:ssh*」では区別できない。

screenを使っていた時は @mounemoi さんに教えてもらった「screen利用中にsshコマンドを実行すると、ウィンドウ名がホスト名(正確にはSSHコマンドオプション)になった別ウィンドウを開く設定」で解決していました。

tmuxに移行するのに伴い同じことができないかと模索した結果、上記の方法をベースになんとか形になったのでまとめてみます。

~/.bashrc

# ssh 時に新規ウィンドウを作る
ssh_tmux() {
    ssh_cmd="ssh $@"
    tmux new-window -n "$*" "$ssh_cmd"
}

if [ $TERM = "screen" ] ; then
    tmux lsw
    if [ $? -eq 0 ] ; then
        alias ssh=ssh_tmux
    fi
fi
  • 「tmux lsw」の結果を評価しているのは、screenも併用していた場合への配慮です。
  • 「-n "$*"」ではsshコマンドの引数をずらっと与えているので、ポート番号やユーザ名を指定していると大変残念なウィンドウ名になります。
    • 対策として上記を指定する代わりにSSH接続先の.bashrcに「printf "\033k$HOSTNAME\033\\"」を書いておくという手があります。(ログイン後にウィンドウ名がホスト名に書き換わります)