2021-1-26
こちらにInclude対応版の記事を書きました2021-1-13
こちらに最新版の記事を書きました
管理するサーバが増減するたびに変更を加えるOpenSSH
の設定ファイル~/.ssh/config
長くなりすぎて管理しづらくなると何とかこれを分割したくなりますね?ファイルが分割できれば、git
で管理したり、一部をメンバーとプロジェクトで共有できたりできて便利そうです。ここでは私が利用している~/.ssh/config
の分割方法をご紹介します。
設定を分割する
~/.ssh/conf.d
というディレクトリを作ってこの中に~/.ssh/config
を分割して配置します。プロジェクトメンバーと共有したい設定はmyproject.conf
のようにシンボリックリンクで解決します。
~/.ssh
├── authorized_keys
├── conf.d
│ ├── config
│ ├── myproject.conf -> ~/tumf/projects/myproject/ssh.conf
│ └── myservers.conf
├── config
├── id_dsa
├── id_dsa.pub
└── known_hosts
すべての設定に共通するような設定は~/.ssh/conf.d/config
においてください。
設定を結合する
OpenSSH
に分割した設定を読んでくれるような機能があれば良いのですが、そのような機能は見当たらないので~/.ssh/conf.d/*.conf
を以下のコマンドで結合します。
cat ~/.ssh/conf.d/config ~/.ssh/conf.d/*.conf
この結合コマンドを、~/.ssh/conf.d
内を修正するたびに実行しても構わないのですが、この一手間を省くために私は以下のようなエリアスを設定しています。
alias ssh="cat ~/.ssh/conf.d/config ~/.ssh/conf.d/*.conf > ~/.ssh/config;ssh"
alias scp="cat ~/.ssh/conf.d/config ~/.ssh/conf.d/*.conf > ~/.ssh/config;scp"
alias git="cat ~/.ssh/conf.d/config ~/.ssh/conf.d/*.conf > ~/.ssh/config;git"
alias knife="cat ~/.ssh/conf.d/config ~/.ssh/conf.d/*.conf > ~/.ssh/config;knife"
かなりベタな感じですが ~/.ssh/conf.d
をBitbucketあたりにpush
すると複数のクライアントで共有できて便利です。
もっといい方法があれば是非教えて下さい。