sshrcで環境を汚さずにサーバの .bashrc .tmux.conf .vimrc 等をカスタマイズする
複数人で管理している本番サーバの環境をオレオレカスタマイズしてる人はいないと思うが、デフォルトのままだと使いにくいので、ぎりぎり許せる最大公約数的な設定をしているという管理者は多いのではないだろうか。
それでも、tmux や screen のプリフィックスは人によって通常使っているキーが違っていて、これが異なるだけで非常に使いにくかったりする。自分はログインする度に以下のようなコマンドを打ちこんでいた。実に面倒くさい。
$ tmux set-option -g prefix C-t
この件についてtwitterで聞いてみたところ、皆さんサーバ上に個人用の設定ファイルを用意して、ログイン時にそれを読み込んだりしているようだった。
で、これを何とかしようと思って少し調べてみた結果、以下の sshrc を使うのが便利という結論に至った。
https://github.com/Russell91/sshrc特徴としては、
- sshログイン時に毎回流し込むので環境を汚さない
- いちいちサーバに設定ファイルをコピーする必要がないので、管理するサーバの台数が多くても安心
- ローカルの設定ファイルだけメンテナンスしておけば、常に同じ環境で作業ができる
- サーバ上の .bashrc も今まで通り読み込まれる
Macの場合は、Homebrewからインストールできる。
$ brew install sshrc
次に設定ファイルを用意する。
~/.sshrc
tmux() {
local TMUXDIR=/tmp/.yamashita-tmux
if ! [ -d $TMUXDIR ]; then
rm -rf $TMUXDIR
mkdir -p $TMUXDIR
fi
rm -rf $TMUXDIR/.sshrc.d
cp -r $SSHHOME/.sshrc $SSHHOME/bashsshrc $SSHHOME/sshrc $SSHHOME/.sshrc.d $TMUXDIR
SSHHOME=$TMUXDIR SHELL=$TMUXDIR/bashsshrc `which tmux` -f $SSHHOME/.sshrc.d/.tmux.conf -S $TMUXDIR/tmuxserver $@
}
export VIMINIT="let \$MYVIMRC='$SSHHOME/.sshrc.d/.vimrc' | source \$MYVIMRC"
export SHELL=`which bash`
# alias etc...
alias ll='ls -l'
alias la='ls -A'
tmux関数は re-attach するためのおまじないで、これを利用することで他の人とセッションを共有しなくなる。
次に ~/.sshrc.d/ というディレクトリを作って、.tmux.conf や .vimrc を置けば設定は完了。また、ローカルでzshを使っている人は「compdef sshrc=ssh」を追加しておくと補完が効いて幸せになれる。
.sshrc .sshrc.d/ ├── .tmux.conf └── .vimrc
それでは、早速サーバに接続してみよう。普段使っている ssh コマンドの代わりに sshrc コマンドを使う。中身はシェルスクリプトで書かれたsshのラッパーなので、オプション等はそのまま利用できる。
$ sshrc username@servername $ tmux
自分の .tmux.conf が反映され、使い慣れた環境が再現されているはず。うん便利。
ひとつ注意点としては、バリバリにカスタマイズせずに必要最低限にしておいたほうがよいということ。特にtmux-powerlineなどで魔改造しているような人は、サーバ管理用の専用設定を用意したほうがよい。ログイン時にファイルを転送する必要があるので、作者の方も64KB以下を推奨している。