Я настроил ~/.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