Remote SSH で Include ディレクティブを利用したときにハマったこと

こんにちは、M1の中川です。
今年度よりCDSLに配属になったのでブログ初投稿です。

最近になって、ssh_configに書かれたHostの数が増えるにつれ、configファイルを分割したいというモチベーションが湧いてきました。
そこで今回、OpenSSH 7.3から利用可能になった Include ディレクティブを用いて以下のように、ファイル分割を試みました。

  • ~/.ssh/config
Include conf.d/*
Host hoge
    # field omitted
  • ~/.ssh/conf.d/foo
Host foo
    # field omitted
  • ~/.ssh/conf.d/bar
Host bar
    # field omitted

これを用いてターミナル上から、ssh hoge はもちろん、ssh foo やらssh bar をすることになんら問題はありませんでした。
しかし、Visual Studio Codeの拡張機能にあるRemote SSHの方で問題が生じました。~/.ssh/configに直接書かれたhogeはRemote SSHに認識されましたが、foobar認識されませんでした。どうもInclude が機能していないように見えます。

ここで、「なんだRemote SSHでInclude使えないじゃん」と一旦諦めたのですが、後日改めてconfigの分割に挑戦をしていたところ、Remote SSHのレポジトリにそれらしきIssueを見つけました。
要はIncludeディレクティブの* (ワイルドカード)に対応ができていないということで、~/.ssh/config を

  • ~/.ssh/config
Include conf.d/foo
Include conf.d/bar

のように書き換える必要がありました。(完全に盲点で、ワイルドカードだけがNGだとは思いもしませんでした。)
書き換えたら、ちゃんとRemote SSHにfoo,barともに認識されるようになりました 🙂

まとめ

今回は、ssh_configのIncludeディレクティブの紹介と、Remote SSHでは (今のところ) ssh_configのIncludeディレクティブで * (ワイルドカード) が利用できないため1ファイルずつ Include をする必要がある、という話をしました。
Includeディレクティブによるファイル分割も、Remote SSHもとっても便利なのでどんどん活用していきましょう!