Masteries

技術的なことや仕事に関することを書いていきます.

sshのconfigファイルをincludeっぽくする

sshの設定ファイル(~/.ssh/config)を分割したい, という欲求は結構あるのではないでしょうか.

例えば大量のサーバを管理している時, 設定ファイルをサーバの用途や環境などでファイルを分けて, config.awsとかconfig.vpsとかといった名前でグルーピングする, とか.

sshのconfigファイルがincludeに対応していれば, ~/.ssh/configからこれらのファイルをincludeする, といった形で解決出来るのですが, sshの設定ファイルのincludeは出来ないっぽいです.

解決策として, 上記の記事ではsshコマンドにaliasを貼って, 各PC固有の設定ファイルと共通の設定ファイルを連結する, という方法が紹介されていたので, こういう感じで解決してみました.

alias 'ssh'=cat ~/.ssh/config.local ~/.ssh/config.global >> ~/.ssh/config; ssh

非常に強引感はありますが, そのPCに不必要なssh関連の設定を混入させない, という目的は達成出来ているので, しばらくはこれで過ごしてみる予定です.

おまけ: SSH & peco

ちなみに, 最近は「ssh」の後にホスト名を入力するのが面倒なので, pecoで選択出来るようにしています.

function peco-ssh() {
  SSH=$(grep "^\s*Host " ~/.ssh/config | sed s/"[\s ]*Host "// | grep -v "^\*$" | sort | peco)
  ssh $SSH
}
alias ss="peco-ssh"

ssを入力すれば, 後はpecoで接続したサーバを選び, 自動的に接続してくれます. 管理しているサーバが多ければ多いほど, 非常に便利でオススメなので皆様も是非使ってみてください.