はじめに

複数のターミナルでSSH接続しながら作業していると、時々「これ、どのサーバーだっけ?」ってなることはありませんか?
今回、それを解決するスクリプトを紹介します。

前提環境

  • Mac OS
  • iTerm2
  • Homebrew

手順

1. はじめに、bashのバージョンが4以降である必要があるため、以下のコマンドを実行してください。
brew install bash
2. 次に、~/.ssh/ssh-change-bg.sh ファイルを作成し、以下の内容をコピペしてください。
#!/usr/local/bin/bash
# ↑bashバージョン4以降必須 `brew install bash`

# 見つからない場合は `which -a ssh` で確認
CMD_SSH=/usr/local/bin/ssh

# デフォルトカラー
BG_COLOR_DEFAULT='000'

# 設定するホスト名、カラーコード
declare -A HOST_NAMES=(
  ['hostname1']='037'
  ['hostname2']='055'
)

REGEXP_CAUTION_HOST="$(IFS="|"; echo "${!HOST_NAMES[*]}")"

# Ctrl-Cした時
trap 'echo ""; bg_color_default; exit;' INT

# 背景変更 (iTerm2)
function bg_color_change(){
  echo -ne '\033]1337;SetColors=bg='"$1"'\a';
}

# sshから抜けた際に背景を戻す (iTerm2)
function bg_color_default(){
  bg_color_change $BG_COLOR_DEFAULT
}

# 背景変更
REGRET="$(grep -E "$REGEXP_CAUTION_HOST" <(echo "$@") 2>&1)"
echo $REGRET

if grep -Eq "$REGEXP_CAUTION_HOST" <(echo "$@") 2>&1; then
  if [ -n "${HOST_NAMES[$REGRET]}" ]; then
    bg_color_change "${HOST_NAMES[$REGRET]}"
  else
    echo "正規表現の結果とキー名が一致しませんでした。";
    echo "正規表現結果:$REGRET";
  fi
fi

# ssh接続
$CMD_SSH "$@";

# sshから抜けた際に背景を戻す
bg_color_default
3. 12~13行目の左側の指定にはSSH接続時に背景色を変えたいホスト名、右側にはカラーコードを指定します。
# 設定するホスト名、カラーコード
declare -A HOST_NAMES=(
  ['hostname1']='037'
  ['hostname2']='055'
)
4. シェルスクリプトの実行には権限が必要なため、以下のコマンドを実行します。
chmod 744 ~/.ssh/ssh-change-bg.sh
5. ~/.zshrc ファイルの最終行に以下を追記。
alias ssh='~/.ssh/ssh-change-bg.sh'

設定はこれで以上です。
ssh xxxx(設定したホスト名) でiTerm2の背景色が変わるのを確認できると思います。
もし変わらない場合、iTerm2を開き直してみてください。

最後に

今回紹介したコードは設定したホスト名へのSSH接続のみ色が変わるようになっています。

接続先関係無しにランダムで背景色が変わるようにするのも面白いと思うので、
ぜひご自分の好きなスタイルに改良してみてください。