らぼるてっく。

てっくてっく歩いてっく。

ssh config の接続先をファイル分割してグルーピングしてみたよ

ラボルの川村です

ところでssh config書いてますか?

~/.ssh/config

に羅列しまくってて見通し悪くなってるんじゃないですか?

実はいい感じにファイル分割して、グルーピングできるんですよ。 (そんなに接続先多い人も少なそうですが...自分は多いので、この設定役立ってます)

と言っても実は簡単で、ssh configではincludeが使えるのでそれでファイル読み込むだけです。


少し脱線しますが、数年前自分は5個くらいプロダクトを担当してて、それぞれ開発環境・本番環境などなど接続先が大量にありました。 当時はconfigに羅列してたんですが、いい感じに管理できてなかったので、汚いconfigだったんですよね。

以下のごちゃごちゃしてました(ファイル内でちゃんと見やすくすれば良いという話もありますが、まあまあまあ)

※丸いのは接続先です。

ファイル分割して管理することにより以下のようにきれいに分けられます。

見通しが良くなりました。

現在はlabolと資金調達プロの2プロダクトなので管理対象は少ないですが、 ラボルでは社内にPaaS環境を構築していて、個人的便利サービスや社内で使える便利サービスなどを、そこに沢山ホスティングしています。

これからもボコボコサービス増えるかもしれないので、引き続きssh configのファイル分割は役に立ちそうです。


話を戻して設定をしていきます。

適当にディレクトリとファイルを作成

.ssh配下にconf.dディレクトリ、hostsディレクトリを作成しました。

~/.ssh
    └── conf.d
       └── hosts
          ├── app1
          ├── app2
          └── app3

app1からapp3はファイルで、ここに各サーバへの接続情報を書いていきます。

~/.ssh/configに書く内容と同じです。

たとえばこんな感じ

~/.ssh/conf.d/hosts/app1

#==============================================
# app1
#==============================================
Host app1-server1
  HostName app1-server1.example.com
  User sampleUser
  IdentityFile ~/.ssh/id_rsa

Host app1-server2
  HostName app1-server2.example.com
  User sampleUser
  IdentityFile ~/.ssh/id_rsa

.ssh/configにファイル読み込む処理記述

.ssh/config

Include conf.d/hosts/*

これだけです。

接続する

設定は終わったので後はsshで接続するだけです。

ssh app1-server1
ssh app1-server2

ちゃんとグルーピングしたファイルが読み込まれていれば、接続できるはずです。

グルーピングされていれば、追記する際や対象のプロダクトを開発しなくなったときなど一括で消せるのでオススメです。

自分はconf.d配下に接続先によって、terminalのカラーリングを変える設定を入れています。これはまたいつか紹介します。

最後に

ラボルでは、エンジニアを積極採用中です。1、2年目のエンジニアから経験豊富なテックリードやエンジニリングマネージャーまで、興味がある方はぜひご応募ください!!

labol.co.jp