ssh config を分割して管理する

連携するシステムが増えたりして、接続するサーバが増えることってありますよね。

その度に一つの config ファイルを編集していると、肥大化して保守性や可読性が悪くなってしまうので、分割して管理しています。

ディレクトリ構造

PJ毎だったり、システム毎だったり、ポリシー毎だったり、自分の好きな通りにディレクトリを切って、それ毎の config や鍵を配置します。

~/.ssh
├── 00_foo
│   ├── config
│   ├── id_rsa
│   └── id_rsa.pub
├── 01_bar
│   ├── config
│   ├── id_rsa
│   └── id_rsa.pub
├── 01_baz
│   ├── config
│   ├── id_rsa
│   └── id_rsa.pub
├── config
└── known_hosts

各configを結合する

.ssh 直下の config しか使われないので、ssh を使う前に config を生成する必要があります。

cat ~/.ssh/*/config > ~/.ssh/config

~/.zshrc~/.bashrc に書いておくと、terminal ログイン時に結合されるようになります。

alias ssh="cat ~/.ssh/*/config > ~/.ssh/config;ssh"
alias scp="cat ~/.ssh/*/config > ~/.ssh/config;scp"
alias git="cat ~/.ssh/*/config > ~/.ssh/config;git"

config を使うコマンドに alias を設定しておけば、実行時に毎回最新の状態が結合されるようになります。

以上

ssh