~/.ssh/configを分割管理できるpincというコマンドを世に産んだ

初夏が猛暑!皆様いかがお過ごしでしょうか?
昨今、サーバインフラのクラウド化により一人のエンジニアが複数のサービスのサーバに対してSSH接続することも多くなってきました。また多くのサーバでグローバルIPを保つ必要がなくなり、リバースプロキシを置いて管理する構成が増えてきたように思います。そこで悩まされるのが~/.ssh/configの管理じゃないでしょうか?

ファイルが500行くらいになったり、新しいエンジニアが入るたびに

「xxxに接続したいんですけど、繋がらないんですよぉ~」

「なっぁぁぁにぃぃぃ~~~~!?この内容を~/.ssh/configに黙って書いてくれ!!!1」

なんてやり取り多いですよね。。そういったやり取りをなるべく少なく出来るようにGolangでpincというコマンドを開発しました。

インストール

OS Xで利用することが多いかと思いますのでhomebrewを準備しています。

$ brew tap pyama86/pinc
$ brew install pinc

使い方

$ pinc init

initコマンドにより~/.ssh配下にconf.dディレクトリ、pinc.ymlbase_configファイルが作成されます。

  • conf.d

配下に作成されたディレクトリ、ファイルを再帰的に読み込みます。

  • pinc.yml

includeディレクティブ配下に配列でファイル、ディレクトリを定義すると再帰的に読み込みます。

  • base_config

~/.ssh/configをコピーしたファイルです

$ pinc gen

initファイルで作成、定義されたファイルをマージし、~/.ssh/configファイルを作成します。

便利な使い方

複数サービスを提供している会社の場合、~/.ssh/pinc.ymlに下記のように定義することで、複数サービスの~/.ssh/configを一元管理できるようになります。

include:
  - /path/to/ServiceA_File
  - /path/to/ServiceB_Directory

このように定義しておくとServiceA、ServiceBの設定ファイルをマージして利用することが出来るので、都度都度定義する必要がなくなります。

最後に

Shellスクリプトでワンライナー管理しているような運用もあるとは思うのですが、シンプル、手軽に初められるのでpincぜひご活用下さい。