SSH 設定でグロビングを使用して SSH トンネル経由で接続するにはどうすればよいですか?

SSH 設定でグロビングを使用して SSH トンネル経由で接続するにはどうすればよいですか?

ローカルホストから ServerC1..n までのアーキテクチャは次のとおりです。

ローカルホストにファイルを設定しました~/.ssh/config:

### First jump host. Directly reachable
Host ServerA
    Hostname 10.0.5.101
    User jenny
    IdentityFile /home/admin/.ssh/serverA

### Second jumphost. Only reachable via 10.0.5.101
Host ServerB1
  HostName ServerB1
  User james
  ProxyJump ServerA
  IdentityFile /home/admin/.ssh/james

### Host only reachable via serverA and ServerB1
Host ServerC1
  HostName ServerC1
  User root
  ProxyJump ServerB1
  IdentityFile /home/admin/.ssh/ServerC1

上記の設定を使用してコマンドServerC1を使用して直接接続できます。ssh ServerC1localhost

問題は、サーバーが多数存在しServerB's、それぞれがServerB複数のサーバーに接続されていることですServerC's。秘密鍵はすべてのサーバーで同じなので、これは問題ではありません。

ローカルホストから、SSHトンネル経由でServerC1、2、3、..nのいずれかに接続したい

ServerA/etc/hostsには ServerB のすべてのホスト名と IP が含まれており、各 ServerB のファイルには ServerC の IP が含まれています/etc/hosts

これを実現するために、ファイル内でパターンマッチングを使用できますか? 現在、私は特に指定したため、localhost's ~/.ssh/config接続のみに制限されています。ServerC1ServerB1ServerC1

答え1

reddit からの助けにより、この問題に対する最善の答えは、~/.ssh/config次のようにファイルを構成することです。すべての ServerB* が同じ IdentityFile を持っていると仮定します。

Host ServerA
    Hostname 10.0.5.101
    User jenny
    IdentityFile /home/admin/.ssh/serverA

Match originalhost ServerB*
    User james
    ProxyJump ServerA
    IdentityFile /home/admin/.ssh/james

そしてコマンドラインで:

ssh -J serverB1 -i /home/admin/.ssh/ServerC1 root@ServerC1

関連情報