Итак, у меня есть куча серверов, которые доступны только через хост-бастион.

Однако мой бастионный хост имеет динамический IP-адрес, который меняется случайным образом.

Для подключения по ssh к другому серверу у меня просто есть .ssh/config с ProxyJump, ссылающимся на хост моего сервера-бастиона, поэтому мне нужно изменить IP-адрес только в одном месте. то есть:

Host preprod_jumphost
    Hostname 123.123.123.123
    Port 22
Host target_host1
    Hostname 201.201.201.201
    ProxyJump preprod_jumphost
Host target_host2
    Hostname 201.201.201.202
    ProxyJump preprod_jumphost

Изменив IP-адрес 123.123.123.123 на новый, все остальные мои хосты будут правильно обновлены.

Однако у меня есть некоторая служба, к которой мне нужно подключиться с использованием локальной переадресации (в основном БД), которую я не могу подключить по SSH к серверу.

Я попытался использовать псевдоним хоста в имени хоста, например:

Host db_preprod
        Hostname  preprod_jumphost
        LocalForward  5432 201.201.201.111:5432

однако, когда я бегу, ssh db_preprodя получаю:

ssh: Could not resolve hostname preprod_jumphost: Name or service not known

Если я заменю имя хоста на динамический IP, как в:

Host db_preprod
        Hostname  123.123.123.123
        LocalForward  5432 201.201.201.111:5432

оно работает. Я могу ssh db_preprodи свои psql -UYYY -d XXX -p 54332 -h localhostработы.

Поскольку у меня есть много баз данных и других служб, к которым мне нужен доступ, есть ли способ ссылаться на preprod_jumphostопределение на другом хосте для моего различного LocalForwardопределения. Таким образом, у меня нет кучи конфигурации хоста для обновления при изменении IP-адреса хоста-бастиона?

Хотя я знаю, что мог бы иметь несколько LocalForward, определенных непосредственно на моем хосте Host preprod_jump как

Host preprod_jumphost
    User ubuntu
    Hostname 123.123.123.123
    Port 22
    LocalForward  5432 201.201.201.111:5432
    LocalForward  5433 201.201.201.122:5432
    LocalForward  5434 201.201.201.133:5432
    LocalForward  5435 201.201.201.144:5432

Я не хочу, чтобы весь порт постоянно перенаправлялся в тот момент, когда я где-то ssh (особенно для моего prod env). Я хочу явно запустить сеанс ssh, когда мне это нужно.

answer

Возможно, вы пытаетесь сделать это слишком сложным. Просто добавьте форварды в конфигурацию целевого хоста. Не беспокойтесь о ProxyJump, когда дело доходит до рассылки. То, как работает ProxyJump, означает, что вы можете игнорировать его для этой цели, поскольку переадресация будет происходить через ssh-соединение, установленное с вашей машины на удаленную цель.

Поэтому, используя нижеприведенное, просто установите ssh-соединение с db_preprod, которое выполнит ProxyJump и переадресацию.

Host preprod_jumphost
    Hostname 123.123.123.123
    Port 22
Host db_preprod
    ProxyJump preprod_jumphost
    Hostname 201.201.201.111
    LocalForward  5432 201.201.201.111:5432

Since I have a lot of db and other service that I need access

Вы можете просто сделать один SOCKS вперед и делать все через SOCKS. Динамический характер прокси-сервера socks в основном означает, что вы можете туннелировать ЛЮБОЙ протокол tcp через соединение ssh без множества настроенных переадресаций, если у вас есть клиентское программное обеспечение, способное использовать SOCKS.

Host preprod_jumphost
    Hostname 123.123.123.123
    Port 22
    DynamicForward 8888