~/.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.yml
、base_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ぜひご活用下さい。