この投稿は インタープリズム的「俺達私達の進捗を上げる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接続で見た目を変えることができると思います。
活用頂き、少しでも気持ち良く作業が出来るようになれば幸いです。