サーバが多くSSH鍵の管理が大変です。どんな工夫をしていますか?

  • 49
    いいね
  • 0
    コメント

これは「コードを書いていて困ったときに、suinがチャットで質問に答えたり相談に乗るsuinのプログラミング相談室(仮)」で頂いた質問と僕の回答の要約です。

質問

管理するサーバ数が増えてきて、SSH秘密鍵の管理も大変になってきています。suinさんは、SSH鍵の管理をどうやっていますか?

suinの回答

サーバって何台くらいになりますか?僕はせいぜい20台〜30台くらいがマックスなので、参考にならないかもしれませんが、戦略として次の2つをやっています。

  • 使う鍵を減らす
  • ログイン情報をモジュール化する

鍵を減らす

鍵を減らすのは同じ公開鍵を使い回す方法です。僕はできるだけこれをしてますね。セキュリティと利便性のトレードオフでバランスを取る戦略です。サーバの運用ルールや、与えられた鍵でしかアクセスできないなどで、できないこともあります。

ログイン情報をモジュール化する

ログイン情報をモジュール化するのは、Includeを使ってます。~/.ssh/configにInclude */configと書いておいて、プロジェクトごとにディレクトリを作って管理してます。こうしておくことの利点は、次のものがあります。

  • プロジェクトが終了したり、担当から外れたときはディレクトリを削除すればスッキリする。
  • プロジェクトのチームメイトにSSH接続情報を共有するとき~/.ssh/project_hoge/configを送ればいい。

Includeについては以前ブログに書いてます。待望の.ssh/configファイル分割がSSH 7.3から出来るようになったようです

ブログにはディレクトリ構成について詳しく書いてなかったので、実際どうやっているか具体的に説明します。

まず~/.ssh/configはこの数行にしています。

~/.ssh/config
Host *
  UseKeychain yes

Include */config

次に、プロジェクトごとにディレクトリを作り、SSHログイン情報をまとめています。

├── config ... すべてのサーバに共通した設定を書くのと、*/configをIncludeする場所
├── id_ecdsa ... 使いまわす鍵
├── id_ecdsa.pub ... 使いまわす鍵
├── known_hosts
├── github ... プロジェクトごとにディレクトリを作り
│   ├── config ... プロジェクトごとにconfigファイルを置く
│   ├── id_ecdsa
│   └── id_ecdsa.pub
├── bitbucket
│   ├── config
│   ├── id_ecdsa
│   └── id_ecdsa.pub
├── projhoge
│   ├── config
│   └── id_rsa
├── projfuga
│   ├── config
│   └── id_rsa
...

たとえば、githubの接続情報だとこうなっています。

~/.ssh/github/config
Host github github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/github/id_ecdsa

開発プロジェクトの接続情報はこんな感じにまとめています。

~/.ssh/projhoge/config
Host example.*
  IdentityFile ~/.ssh/projhoge/id_rsa
  User alice
  Port 2222

Host example.staging
  HostName ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com

Host example.production
  HostName ec2-YY-YY-YY-YY.ap-northeast-1.compute.amazonaws.com

# SequelProでRDSにつなぐための踏み台サーバ
Host example.rdsgateway
  HostName XX.XX.XX.XX
  User ubuntu
  Port 2233

# VPNサーバ
Host example.vpn
  HostName ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com
  User ubuntu
  Port 2244

回答に対しての反応

ありがとうございます!僕の場合は公開鍵を使いまわす方法で管理する鍵を減らせそうです。Includeはプロジェクトごとに管理できるので、処分するときに一括で消せる点が魅力だと感じました。