Macのターミナル(bash)で特定のホストにsshした時にターミナルの背景(というかテーマ)を変更する

既存の ssh コマンドを自分で用意したシェルで上書きすることで実現できる。


既存の ssh は以下になっていると思う。

$ which ssh
/usr/bin/ssh

次にシェルを用意する。
場所はどこでもいいけど、~/bin を作って、そこに配置するのがよさそう。
ssh を シェルで上書きするので、ファイル名は ssh じゃないとダメ。

$ cd ~
$ mkdir bin
$ touch bin/ssh


作った ssh ファイルは以下のようにする。

#!/bin/sh

set_bg () {
  osascript -e "tell application \"Terminal\" to set current settings of window 1 to settings set \"$1\""
}

on_exit () {
  set_bg "ft"
}
trap on_exit EXIT

#echo $@

case $@ in
    *myhost1* | *myhotst2* ) 
        set_bg "Red Sands" ;;
    *)
        #echo 'not danger host'
esac

#echo 'please wait login ..........'

/usr/bin/ssh "$@"


コマンドの引数($@)に myhost1, myhost2 が含まれている場合に
Red Sands というターミナルのテーマを適用している。
接続先のサーバから抜けた時は ft というテーマに戻している。

対象サーバのcase文と、適用するテーマ名をイジれば、好きな動作にカスタマイズできる。
別にcase文じゃなくてif文でもいいんだけど・・・。

ssh のコマンド自体は一番下の行にある「/usr/bin/ssh "$@"」で既存のsshに渡しているので、
ターミナルのテーマ適用をフックしているだけで、
ssh の動作自体は変わらない。

echo をコメントアウトしているのは
githubに接続する際に echo の出力があると以下のエラーが発生するから。
動作確認できたら echo の部分は消す or コメントアウトした方がいい。

fatal: protocol error: bad line length character: git@

あとは既存コマンドを起動せずに自作のsshファイルを起動させるように
basic で PATHを設定しておく。

$ cat ~/.bashrc
PATH=/usr/local/Cellar/ctags/5.8_1/bin:$HOME/bin:$PATH

「$HOME/bin」の部分がそれにあたる。

bashrcを適用する。

$ source ~/.bashrc

これで ssh するとターミナルのテーマが変わるはず。