tmux ♡ ssh な生活

ターミナルマルチプレクサ Advent Calendar 2011の17日目です。
16日目はglidenoteさんのtmuxの外観をカスタムして、運用と開発を加速させるでした。

さてみなさん、screenとtmuxどっちを使っていますか?
screenとtmuxどっちが好きですか?

僕はtmuxを使っていますが、screenが好きになりそうです。
11日目のyoshikawさんのlayoutに関しる記事をみて、tmuxのwindow-paneよりもlayoutの方が便利そうだなぁと思ってしまいました><
でもtmuxの見た目(?)の方が好きなのでやっぱりtmuxを使うことにします><

さて、前置きはこれぐらいにして本題へ。
ここからの話はtmux前提ですが、tmuxでできることは大概screenでもできるはずなので適宜おきかえていただけると。
(最近screen使ってないのでどうか分かりませんが…)

sshコマンドをキーバインドで呼びだす

みなさんは開発環境やら、本番環境やらにsshで入ってほげほげするあれげな人ばっかりだと思うのですが、大体sshするときって別window使ったり、paneを切ってやったりしますよね?
でもわざわざnew-windowやったり、split-paneしてからsshとかってダサくてキモいですよね。
なので、.tmux.confに以下のような設定をしてその辺一発でできちゃうようにしましょう。

# ssh
unbind s
bind-key s command-prompt "new-window -n ssh 'ssh -t %1'"
bind-key ^s command-prompt "split-window -h 'ssh -t %1'"
bind-key S command-prompt "split-window 'ssh -t %1'"

キーバインドは自分の好みに合わせてもらえればいいです。
tmuxだとwindowとpaneがあるのでどれがどのキーバインドだったか自分でも忘れてしまうというのが玉に瑕です…

っていうか、本番環境とかセキュリティ的にgateway経由じゃないと入れねーよJKという方は、

# gateway
unbind g
bind-key ^g command-prompt "split-window -h 'ssh -t gateway \"ssh -t %1\"'"
bind-key G command-prompt "split-window 'ssh -t gateway \"ssh -t %1\"'"
bind-key g command-prompt "new-window -n actual 'ssh -t gateway \"ssh -t %1\"'"

とかしておけばいいと思います。
クォートをエスケープしないといけないところがキモです。
僕の場合は本番はsshしてからtmux使うようにしているので使わないですけど><

起動sessionの設定を.tmux.confに書いて最初からssh

上で書いた設定のように、tmuxではtmuxコマンド実行時に任意のshellコマンド(クォートで括っているところ)を実行可能です。
それでそのプロセスが死んだらwindowやらpaneやらも閉じてくれます。

.tmux.confにはsessionの設定も書けるので以下のように書いておけば、
kill-serverした後でも同じようにsshしたり、pane作ったりしたものでも最初から使えちゃうというわけです。
tmux起動時のデフォルトの設定みたいな感じでしょうか。

# custom session
new-session -s mobcov 'ssh -t develop'
split-window -h 'ssh -t develop'
split-window 'ssh -t develop'
select-pane -t 0
rename-window develop
new-window -n ssh 'ssh -t develop "ssh -t stage"'
split-window -h 'ssh -t develop "ssh -t stage"'
split-window 'ssh -t develop "ssh -t stage"'
select-pane -t 0
new-window -n local
split-window
select-pane -t 0

これでtmux attatchすればいつでもいい感じにtmuxできますね!

まとめ

以上、超簡単で申し分けない感じですが、.tmux.confに書いているssh関連の設定を紹介してみました。
でも自分は上記の設定のおかげでかなり便利にtmuxを使えています。
(これと同じことがscreenでもできるかどうかはよく分からないので、今後のscreenハードコアな方に期待です><)
みなさんの日常業務に少しでもお役にたてたなら幸いです。

おまけ

dodaさんの15日目のリモートの tmux でコピーした内容のローカルのクリップボードへの反映ってMacのTerminalやiTerm2でもできるんですかね?
いまはマウスでselectとしてコピーやってるんですが、split-paneしてるとマウスselectが隣りのpaneにいっちゃってうまくできない><
なのでそのためにkill-paneしたりしている今日この頃です。
そういう意味でもscreenのlayoutの方がいいかもと思ったり…