LoginSignup
7
1

More than 3 years have passed since last update.

プロジェクト毎に複数サーバある場合のssh configの管理方法

Posted at

対象

  • 複数プロジェクトあったりしてssh configが膨大になってる人
  • Includeキーワードが使える2016-08-01リリースのOpenSSH 7.3以上を利用している人
  • ssh設定の一つ一つの項目自体は理解している人(本記事で説明を省きます)

ディレクトリ構造

まずはディレクトリ構造を記載します。
プロジェクトによっては踏み台サーバを経由する場合があったり、鍵環境毎で分かれてなかったりするので適宜置き換えてください。
本内容はあくまで一例ということで。

tree
~/.ssh
├  conf.d                   --- プロジェクト毎のディレクトリを入れるためのディレクトリ
│   ├ project1              --- プロジェクト1つ目のディレクトリ。プロジェクト名を仮にproject1とする 
│   │   ├ config            --- project1で使用するssh設定をここに記載する(内容を後述)
│   │   ├ project1-prod.pem --- project1の本番サーバで使う秘密鍵
│   │   └ project1-dev.pem  --- project1のの開発サーバ使う秘密鍵
│   └ project_2             --- プロジェクト2つ目のディレクトリ。プロジェクト名を仮にproject2とする
│       └ config            --- project2で使用するssh設定をここに記載する(project1のconfigと同じなので説明省略)
├  config                   --- 全体に適用するssh設定をここに記載する(内容を後述)
├  id_rsa                   --- config内でキーを指定してない場合にデフォルトで使われる秘密鍵
└  id_rsa.pub               --- 上記id_rsaの公開鍵

説明

ファイル内容を具体例を書きながら説明します。

~/.ssh/config
# 以下のIncludeで各プロジェクトのconfigが全てIncludeされる
Include ~/.ssh/conf.d/*/config

# *を指定してすべてのssh設定で適用したい項目を入れる
Host *
  UseKeychain yes
  StrictHostKeyChecking no
  AddKeysToAgent yes
  ForwardAgent yes
  ServerAliveInterval 60
  ServerAliveCountMax 60
  TCPKeepAlive yes
  IdentitiesOnly yes

大元の全体に適用されるssh設定と各プロジェクトのconfigのincludeを行います。

~/.ssh/project1/config
# project1に関わるサーバの情報はここにすべて記載する。
# 以下のような命名規則にする。
# Host <環境名>_<プロジェクト名>_<サーバ固有名>

Host dev_project1_api
    HostName api.dev.project1.com

Host dev_project1_admin
    HostName admin.dev.project1.com

Host prod_project1_admin
    HostName admin.project1.com

Host prod_project1_api1
    HostName api1.project1.com

Host prod_project1_api2
    HostName api2.project1.com

Host prod_project1_api3
    HostName api2.project1.com

# project1の開発環境で共通して使う設定項目を記載
Host dev_project1_*
    IdentityFile ~/.ssh/conf.d/project_1/project1-dev.pem

# project1の本番環境で共通して使う設定項目を記載
Host prod_project1_*
    IdentityFile ~/.ssh/conf.d/project_1/project1-prod.pem

# project1で共通して使う設定項目を記載
Host *_project1_*
    User amasok
    Port 2222

上記は管理サーバとAPIサーバがあり、開発環境と本番環境で鍵が分かれているパターンで記載しています。
もし鍵が本番と開発で同じであった場合は*_project1_*IdentityFileを記載します。
プロジェクト毎の規則によって変わるかと思いますが、だいたいこんな感じで僕は対応しています。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1