Как использовать подстановку в конфигурации 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 ServerC1команды из localhostконфигурации, указанной выше.

Проблема в том, что их много ServerB'sи каждый ServerBподключен к нескольким ServerC's. Закрытые ключи одинаковы для всех серверов, так что проблема не в этом.

С локального хоста я хочу подключиться через SSH-туннель к любому из ServerC1,2,3..n

ServerA /etc/hostsсодержит все имена хостов и IP-адреса ServerB, а каждый ServerB содержит IP-адреса ServerC в своем /etc/hostsфайле.

Могу ли я использовать сопоставление шаблонов в моем localhost's ~/.ssh/configфайле, чтобы добиться этого? В настоящее время я ограничен ServerC1только подключением, потому что я специально указал ServerB1иServerC1

решение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

Связанный контент