初夏が猛暑!皆様いかがお過ごしでしょうか?
昨今、サーバインフラのクラウド化により一人のエンジニアが複数のサービスのサーバに対して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ぜひご活用下さい。