takedajs ログ

備考録

iTerm2でSSH先毎に背景色を変える

iTerm2でSSHを行った時に、SSH先毎に指定の背景色に変更されるようにしました。 iTerm2の背景色を設定できるProfileを複数用意し、SSH先毎にProfileを切り替えて背景色を変えます。

今回の記事では、iTerm2のProfile作成から背景色を変更させる実行処理の記述までを書きました。

開発環境

  • iTerm2: Build 3.1.6beta1
  • SSH先①: vagrant@192.168.33.10 (背景色を赤くさせる)
  • SSH先②: vagrant@192.168.33.11 (背景色を青くさせる)

デモ

SSH先毎に背景色が変更されるデモとデモの流れです。

f:id:takedajs:20180220171803g:plain

  1. ローカルから ssh vagrant@192.168.33.10 でアクセス(背景色が赤くなる)
  2. SSH接続のパスワード入力画面でCtrl+Cを押下(背景色が元に戻る)
  3. ローカルから ssh vagrant@192.168.33.11 でアクセス(背景色が青くなる)
  4. SSH接続のパスワードを入力し、接続成功
  5. exit を入力し、ローカルに戻る(背景色が元に戻る)

次からデモの流れを実現するための処理を説明していきます。

Profile作成

iTerm2の背景色を変更させるためのProfileを複数作成します。

iTerm2->Preferences->Profilesを表示します。今回はproductionとstaging用のProfileを作成しました。

Colorsタブ内のBackgroundを設定することで背景色を変えられます。productionは赤、stagingは青を設定しています。

f:id:takedajs:20180220172035p:plain

実行処理を記述

SSH先毎にProfileを変更する処理を記述します。

僕はzshを利用しているため、zshの設定ファイルである.zshrcに処理を記述します。

.zshrcのバックアップをとる

cp .zshrc .zshrc_20180220

.zshrc内に以下を記述

# ssh先毎に背景色を変更

function ssh_set_bgcolor() {
 case $1 in
   # ssh vagrant@192.168.33.10 の時、背景色を赤くする
   vagrant@192.168.33.10 ) echo -e "\033]1337;SetProfile=production\a" ;;
   # ssh vagrant@192.168.33.11 の時、背景色を青くする
   vagrant@192.168.33.11 ) echo -e "\033]1337;SetProfile=staging\a" ;;
 esac
 # Ctrl+Cを押下時、背景色を元に戻す
 trap "echo -e '\033]1337;SetProfile=default\a'" 2
 # exitされた時、背景色を元に戻す
 trap "echo -e '\033]1337;SetProfile=default\a'" EXIT
 ssh $@
}

alias ssh='ssh_set_bgcolor'

trapコマンドを利用することで、指定したシグナル番号orシグナル名がSSH先で実行された時の処理を設定することができます。 今回記述したシグナル番号の2はCtrl+Cを指しています。

trap 'コマンド' [シグナル番号 OR シグナル名]

最後に記述した設定を反映させるために、以下コマンドを実行

source .zshrc

これでデモと同様にSSH先毎に背景色が変更されます。

まとめ

Profileを反映した状態でProfile設定の背景色を変更すると、リアルタイムで色が反映されます。 背景色には赤や青の原色を利用しましたが、微調整しながらより自分好みの背景色を探したいと思います。 また、今回実装した処理を導入することで、本番環境にSSHする時に起きる予期せぬミスが防げそうです。

過去に作成したFirefoxアドオンも本番環境での予期せぬミスを防ぐためのものでした。 今後も予期せぬミスを防ぐための仕組みを作っていきたいと思います。予期せぬミスは撲滅したい。。。涙

参照

iTermでSSHの接続先によって背景色を変える

iTerm2でSSHログイン先別にプロファイルを自動的に切替えて事故防止する方法 | Developers.IO

Proprietary Escape Codes - Documentation - iTerm2 - macOS Terminal Replacement