LoginSignup
60
51

More than 5 years have passed since last update.

.ssh/configもDRYで書きたい

Posted at

結論

これが

Host hoge-humidai
  HostName hoge.com
  User hoge
  port 10022

Host hoge-a
  HostName 10.15.0.10
  User hoge
  IdentityFile ~/.ssh/hoge-a
  ProxyCommand ssh -W %h:%p hoge-humidai

Host hoge-b
  HostName 10.15.0.20
  User hoge
  IdentityFile ~/.ssh/hoge-b
  ProxyCommand ssh -W %h:%p hoge-humidai

Host hoge-c-1
  HostName 10.15.0.30
  User hoge
  IdentityFile ~/.ssh/hoge-c
  ProxyCommand ssh -W %h:%p hoge-humidai

Host hoge-c-2
  HostName 10.15.0.40
  User hoge
  ProxyCommand ssh -W %h:%p hoge-humidai

Host hoge-c-3
  HostName 10.15.0.50
  User hoge
  ProxyCommand ssh -W %h:%p hoge-humidai

下記のようになります

Host hoge-humidai
  HostName hoge.com
  port 10022

Host hoge*
  User hoge

Host hoge* !hoge-humidai
  ProxyCommand ssh -W %h:%p hoge-humidai

Host *-a
  HostName 10.15.0.10
  IdentityFile ~/.ssh/hoge-a

Host *-b
  HostName 10.15.0.20
  IdentityFile ~/.ssh/hoge-b

Host *-c-?
  IdentityFile ~/.ssh/hoge-c
Host *-1
  HostName 10.15.0.30
Host *-2
  HostName 10.15.0.40
Host *-3
  HostName 10.15.0.50

詳しく

上記の.ssh/configについて詳しく説明します。
.ssh/configをまとめる際にはHostでのパターンマッチを利用します。
Hostでサポートされているパターンマッチは*, ?, !の3種類があり、マッチした項目の設定を適用させることができます。
また、最初にマッチしたHostの設定内容はその後にマッチしたHostの設定に上書きされることはありません。

「*」任意の長さの文字にマッチさせる

Host hoge*
  User hoge
Host *-a
  HostName 10.15.0.10
  IdentityFile ~/.ssh/hoge-a

Hostではワイルドカードを使うことができます。
上記のように設定することでhogeから始まるHostに

User hoge

の設定を反映させることができます。
また、-aで終わるHostに

HostName 10.15.0.10
IdentityFile ~/.ssh/hoge-a

の設定を反映します。
「hoge-a」は両方にマッチするため、これらの設定が適用されます。

「?」任意の1文字にマッチにマッチさせる

Host *-c-?
  IdentityFile ~/.ssh/hoge-c
Host *-1
  HostName 10.15.0.30

hoge-c-1hoge-c-2の重複設定を省略するために上記のようにしています。
その際に*-c-?というパターンを利用することで、-c-の後に任意の1文字が存在する場合にのみマッチさせることができます。(ナンバリングが2桁を超えたら設定は変えてください)

「!」パターンを否定する

Host hoge* !hoge-humidai
  ProxyCommand ssh -W %h:%p hoge-humidai

今回の例のように踏み台サーバ以外にのみ設定を適用したい場合はパターン否定を利用します。
Hostには複数のホスト名やパターンを設定することができます。
上記ではhoge*のパターンと!hoge-humidaiの2つを設定し、後者は「hoge-humidai」を否定しているため、「hoge」から始まるかつ「hoge-humidai」ではないHostにマッチするようになっています。

その他

alias ssh='cat ~/.ssh/conf.d/*.config > ~/.ssh/config;ssh'

今回の内容とは関係ありませんが、.zshrcや.bashrcなどに上記のコマンドを追加することで、.ssh/conf.d以下にプロジェクト単位などで設定ファイルを分けて管理することができます。

60
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
60
51