読者です 読者をやめる 読者になる 読者になる

kzk-casino.com

一人前のITエンジニアを目指して

「~/.ssh/config」ファイルの分割方法について

Tech Tips AWS
はじめに

「~/.ssh/config」ファイルの分割方法についてです。

会社で大量のサーバやAWSインスタンスに自分のWorkStationからsshする際、アクセス先を「~/.ssh/config」(以下configファイル)に記載することが多いかと思います。

参考1:
.ssh/configファイルで複数サーバーのSSH接続を管理 - Linux入門 - Webkaru


しかし、アクセス先のインスタンスが膨大な量になってきた際に、configファイル一つで管理していると、ファイルの中身が膨大になり、インスタンスの追加・削除時の作業が非常に大変になってしまいます。

また、configファイルはinclude等の外部ファイルの読み込みをサポートしていないので、デフォルトでファイル分割を行うことはできません。

そこで、無理やり分割した複数のconfigファイル擬きを作成し、それらを寄せ集めて一つの「~/.ssh/config」ファイルを作成する方法について記載します。

ディレクトリ構成

まず、「~/.ssh/」以下のディレクトリ構成は下記のように作成します。

.
├── config
├── configure
│   ├── jump.conf
│   ├── manage
│   │   ├── dev-manage.conf
│   │   ├── prd-eu-manage.conf
│   │   └── prd-manage.conf
│   └── site
│       ├── siteA.conf
│       └── siteB.conf
├── id_rsa
├── id_rsa.pub
├── known_hosts
└── ssh_reconfig.sh


鍵となるのは、「configure」ディレクトリ、「ssh_reconfig.sh」スクリプトです。
以下に順に説明します。

「configure」ディレクト

configureディレクトリにはconfigファイルの”部品”を任意の構成で作成します。
上記の例では、以下のような構成となっております。

  • jump.conf:踏み台系のconfig情報を記載したファイル
  • manage:運営側管理サーバ(共用インフラ)系のconfig情報を記載したファイルをまとめたディレクト
  • site:サイト側管理サーバ系のconfig情報を記載したファイルをまとめたディレクト

ディレクトリ・ファイル構成は各自の管理している構成に合わせて作成すれば大丈夫です。
ちなみに、踏み台を経由した多段sshのconfigの書き方は下記を参照してください。

参考2:
多段SSHの設定を.ssh/configにまとめる - Qiita

ssh_reconfig.sh」スクリプト

さて、上でばらばらと作成したconfigファイルの”部品”を、一つのconfigファイルにまとめる必要があります。
そこで、「configure」ディレクトリ以下のファイルを一つにまとめる簡単なスクリプトを作成します。

#!/bin/sh

# Files
conf_file="~/.ssh/config" #ssh接続時に実際に読まれるconfigファイル
jump_file="~/.ssh/configure/jump.conf" #踏み台系のconfigファイル
manage_file="~/.ssh/configure/manage/*.conf" #運営系のconfigファイル
site_file="~/.ssh/configure/site/*.conf" #サイト系のconfigファイル

# Reconfigure Jump Server
cat $jump_file > $conf_file   #最初に踏み台系のconfigファイルを読み込む

# Reconfigure Manage Server
cat $manage_file >> $conf_file

# Reconfigure Site Server
cat $site_file >> $conf_file

ではPermissionを変更してスクリプトを実行しましょう。

chmod 755 ~/.ssh/ssh_reconfig.sh
~/.ssh/ssh_reconfig.sh

これでconfigureディレクトリ以下に配置したconfigファイルの”部品”を全てまとめてconfigファイルの”本体”に記載してくれます。

また、管理対象のインスタンスに変更があった場合、configureディレクトリ以下の対象のconfigファイルの”部品”を修正して、上記のスクリプトを実行すれば、configファイルの”本体”が書き換わってくれるので、膨大な量のconfigファイル一つを管理するより非常に楽に管理することが可能です。

管理対象のインスタンスがたくさんある方は是非試してみてください。