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

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

「俺は知らなかったんだ… そのターミナルが本番環境に接続していたなんて… 知っていたらrm -rf /なんて、流さなかった…」

想像しただけで前世に帰りたくなりますね。((((;゚Д゚))))ガクガクブルブル

上のは超極端な例ですが、ITエンジニアなら、SSHログイン先の環境を勘違いして危ない目にあったこと、一度や二度あると思います。

そんなSSHを普段使いしている全エンジニアに向けて、iTerm2を利用して、お手軽簡単にSSHログイン先別に、iTerm2のプロファイル(ターミナルの全体的な見た目)を切替える方法をお伝えいたします。

この記事により、全国で一つでも不幸な事故が減れば、筆者本望でございます。

 __
(祭) ∧ ∧
 Y  ( ゚Д゚)
 Φ[_ソ__y_l〉     SSHダ ワッショイ
    |_|_|
    し'´J

ほな、いってみよ。

この記事を読んだらできるようになること

冒頭のGIF動画をみてもらえればおわかりかと思いますが、sshのログイン先に応じて、iTermのプロファイルを自動的に切り替えます。今回は、以下の例で説明します。

$ssh stg-app01 # ステージング環境接続。背景クリーム色。

$ssh prd-app01 # 本番環境接続。背景めそ子。

めそ子、可愛い。

切替方法の原理

iTerm2のエスケープシーケンスを利用すると、コマンドラインからプロファイルの切替ができます。非常にシンプル。

以下の例だと、プロファイルをenv-devに切り替えることができます。

echo -e '\033]1337;SetProfile=env-dev\a'

あとは、SSHログインシェルにエイリアスをきって、SSH接続先に応じてプロファイルを切り替えた後、SSHログインするシェルを起動するようにしてあげます

その他のエスケープシーケンスについては、こちらを参照:Proprietary Escape Codes - Documentation - iTerm2 - macOS Terminal Replacement

事前準備(前提条件)

これをやる時の事前準備です。

iTerm2のインストール

およそ、Macのターミナルアプリとしては、ほぼデファクトと言ってしまって良いiTerm2、この際だから、Mac使っている人で未導入の人は、インストールしておきましょう。

公式サイト:iTerm2 - macOS Terminal Replacement

SSH Configの設定

sshでサーバーに接続する際、都度、sshコマンドで鍵を指定して、接続先のユーザーとIPアドレスを指定するのは面倒くさいものです。

以下のページを参考に、SSH Configを設定しておきましょう。

.ssh/configファイルでSSH接続を管理する - Qiita

以下の設定で、 $ssh stg-app01でステージング環境、$ssH prd-app01で、本番環境に接続する想定です。皆様の環境で利用する際は、接続先のIPアドレスや秘密鍵の場所は適宜書き換えてください。

# for staging env
Host stg-app01
  Hostname 13.XXX.XXX.20
  User ec2-user
  IdentityFile ~/prj/hamada/hamada-key.pem

# for production env
Host prd-app01
  Hostname 13.YYY.YYY.1
  User ec2-user
  IdentityFile ~/prj/hamada/hamada-key.pem

iTerm2のプロファイルの設定

SSH Configの接続先と同じ名前のプロファイルstg-app01prd-app01を作成します。iTerm2の設定メニューから、[Profiles]を選択します。

詳細なプロファイルの設定方法は割愛しますが、新規でプロファイルを作成後[Colors]タグで、右下の[Color Presets]から好きなテーマを選択するのが簡単ですね。

今回は、プロファイルprd-app01において、[Window]タグのBackground Imageで、クラスメソッド2次元社員めそ子のコーナーより、11月めそ子壁紙を設定してます。

(*°∀°)=3

切替え用シェルの実装と動作確認

前置きが長かったですが、切替え用のシェルは10行程度と非常にシンプルです。以下のファイルを作成しましょう。場所は、ホームディレクトリ配下にbinフォルダを作成し、そこに格納します。

#!/bin/bash
 
# set profile 
echo -ne "\033]1337;SetProfile=$@\a"

# ssh login
/usr/bin/ssh "$@"

# set profile(default)
echo -ne "\033]1337;SetProfile=Default\a"

最初に引数で指定されたプロファイルを設定した後、SSHログイン。exitで抜ける時に、プロファイルをDefaultに戻すだけです。

実行権限を付与。

$ chmod +x ~/bin/ssh-change-profile.sh

ターミナルログイン時に自動的にエイリアス設定するため、.bash_profileにエイリアスを設定。

$ echo "alias ssh='~/bin/ssh-change-profile.sh'" >> ~/.bash_profile

あとは、SSHログインしてみて、プロファイルが切り替わればOKです。こんな感じで。

めそ子、可愛いい。

一点注意点として、この方法は、SSHで指定するホスト名と、プロファイル名が完全に一致しているときのみ動作します。なので、下記のような書式ではプロファイルの切替が動作しませんのでご注意ください。

  • ssh username@hostname
  • ssh 各種オプション hostname
  • ssh hostname コマンド

SSH接続先が増えた時の対応方法

今後、SSH接続先が増えた時の対応方法は、以下の2点のみです。

  1. SSH Configの設定

    接続先が増えたときは普通にやることだと思います。

  2. Configの接続先と同じ名前のiTermプロファイルを新規追加

    プロファイルの新規追加ですが、iTerm2の設定画面では既存プロファイルのDuplicate(コピー)に対応しているので、それを使えば、簡単に作成できます。

まとめ「10分ほどの手間で事故防止に役立てよう」

今回は、ステージング環境と本番環境でプロファイルを切り分けましたが、例えば、「自分のプライベート環境と会社の環境」「自社の環境と顧客環境」など、使い分けはいろいろと考えられると思います。

また、プロファイルの切替ですが、見た目(テキスト色や背景)以外にも、キーマッピングやセッションクロージングの挙動なども変更が可能なので、これらを組み合わせると、様々な作業を自動化できる余地があるかと思います。

設定ファイル自体はコメント含めて10行程度で、普段からSSH Configを利用している人にはすぐ設定できるかと思います。気になる方は一度お試しいただければと思います。

それでは、今日はこのへんで。濱田でした。

余談(弊社内)

この記事ですが、先日、渡辺聖剛が書いてバズってた、[macOS] SSHログインしたときだけターミナルの背景色を変えたい (iTerm2)の、オマージュパクリ記事です。

弊社はだいたいいつもこんな感じです。圧倒的感謝!