ssh で接続サーバー毎にターミナルの背景色を変える方法
この投稿は インタープリズム的「俺達私達の進捗を上げる25個前後のTips」 Advent Calendar 2015 - Qiitaの25日目 の記事です。
仕事に役立つTipsのということで、sshで接続サーバー毎にターミナルの背景色を変える方法を紹介します。
接続するサーバーを間違えたことはありませんか?
そんな経験をしたことがある方は、今回紹介する方法でその間違えを減らせる(かもしれません。)
普段MacでiTermを使って作業してますのでこの構成をメインに
実際自分が作業している設定に加え、少し試したことも紹介しようと思います。
今回紹介する方法の動作環境
- OS : Mac OSX El Capitan
- アプリ : iTerm2/ターミナル
準備
ssh 接続できる環境が欲しかったので、 vagrant で適当にvmを立てました。
2つのvmを起動し、それぞれsshでhost名で接続できるように設定をしました。
Host prod HostName 192.168.33.20 User vagrant Port 22 IdentityFile vagrantのリポジトリ/.vagrant/machines/default/virtualbox/private_key Host stg HostName 192.168.33.30 User vagrant Port 22 IdentityFile vagrantのリポジトリ/.vagrant/machines/default/virtualbox/private_key
Mac の iTerm で 背景色を変えてみる
準備も整ったのでやってみます。
とは言ってもそこまでやることは無いのですが。。。
https://gist.github.com/BugRoger/789887 こちらを参考にさせてもらっています。
- 実行できる場所に適当にファイルを作成します。(今回は、~/bin/ssh-iterm-setting に作成)
- 作成したファイルに
755で権限設定 - 作成したファイルに下記の内容を記述
#!/bin/zsh
# ~/bin/ssh-iterm-setting
set_color() {
local HEX_BG=$1
local OPACITY=$2
local BG_R=`echo $HEX_BG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$1 * 257)}'`
local BG_G=`echo $HEX_BG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$2 * 257)}'`
local BG_B=`echo $HEX_BG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$3 * 257)}'`
/usr/bin/osascript <<EOF
tell application "iTerm"
tell current session of current terminal
set background color to {$BG_R, $BG_G, $BG_B}
set transparency to "$OPACITY"
end tell
end tell
EOF
}
# 接続host名で振り分け
if [[ "$@" =~ stg ]]; then
# 色・透明度設定
set_color 000033 0.2
elif [[ "$@" =~ prod ]]; then
set_color 330000 0.2
fi
ssh $@
set_color 000000 0.2
- alias を作る(.zshrc でも .bashrc でも環境に合わせてください)
alias ssh='~/bin/ssh-iterm-setting'

できました。簡単ですね。後はお好みにカスタマイズしてください。
ここまでで紹介したいことは終わりです。。。
が、これ背景設定変えたくなった時面倒じゃない?って思ってしまいました。。。
なので、ちょっと遊んで試してみました。
Profile を指定して同じことが出来るのではないかと!
結果同じことはできませんでした。。。(誰か教えてください。。。)
同じことはできなかったのですが、sshで接続する際に別のタブを開く方法だったらできたので、紹介です。
構成
記述内容
#!/bin/zsh
# ~/bin/ssh-iterm-profile-setting
set_profile() {
local profile=$1
/usr/bin/osascript <<EOF
tell application "iTerm"
tell current terminal
launch session "$profile"
end tell
tell current session of current terminal
write text "~/bin/ssh-connect $@"
end tell
end tell
EOF
}
if [[ "$@" =~ stg ]]; then
# 作成したプロファイルの名前
set_profile "stg"
elif [[ "$@" =~ prod ]]; then
set_profile "prod"
fi
#!/bin/zsh
#~/bin/ssh-connect
close_tab() {
/usr/bin/osascript <<EOF
tell application "iTerm"
tell current session of current terminal
write text "exit"
end tell
end tell
EOF
}
ssh $@
close_tab

これで、接続先毎にProfileを適用することが出来るようになりました。
別タブになってしまうのに目が潰れる方はこちらの方が良いかも?
Mac の ターミナル で 背景色を変えてみる
ターミナル使って作業してるんだけど。。。って方もいると思いますので、こちらの方法もご紹介。
やっていることは、iTermの時と同じです。なので設定内容だけ。
#!/bin/zsh
set_color() {
local HEX_BG=$1
local BG_R=`echo $HEX_BG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$1 * 257)}'`
local BG_G=`echo $HEX_BG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$2 * 257)}'`
local BG_B=`echo $HEX_BG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$3 * 257)}'`
/usr/bin/osascript <<EOF
tell application "Terminal"
tell window 0
set the background color to {$BG_R, $BG_G, $BG_B}
end tell
end tell
EOF
}
set_profile() {
local profile=$1
/usr/bin/osascript <<EOF
tell application "Terminal" to set current settings of first window to settings set "$profile"
EOF
}
if [[ "$@" =~ stg ]]; then
set_profile "Basic"
elif [[ "$@" =~ prod ]]; then
set_color C80000
fi
ssh $@
set_profile "Pro"

お気づきでしょうか?
そう。ターミナルだと操作しているウィンドウをProfileの状態にできるのです。
衝撃です。iTermでもやりたいんです。私は。。。
まとめ?
ご紹介なのでまとめも何もないのですが、踏み台サーバー経由とかでもsshの設定で ProxyCommand使ってみたりすれば大体のssh接続で見た目を変えることができると思います。
活用頂き、少しでも気持ち良く作業が出来るようになれば幸いです。