1

Есть ли способ сделать ssh динамически искать IP-адрес для данного имени хоста через внешний API?

Сценарий таков, что у меня есть несколько клиентов с тысячами различных облачных серверов по требованию (новые добавляются каждый час, старые убиваются каждый час).

Поскольку имен очень много и они меняются довольно быстро, использование DNS API облачной службы на самом деле не вариант (я пробовал раньше, убивает их админ-панели и серверы API).

Так... Я ищу параметр конфигурации в ssh, чтобы использовать скрипт для поиска IP-адреса, когда я делаю "ssh some-name". Я знаю, что могу создать псевдоним сценария ssh и обернуть его, но мне интересно, есть ли доступная внутренняя опция.

1 ответ1

2

Есть несколько вариантов. Прежде всего, есть ProxyCommand , который может использовать произвольную программу вместо TCP-соединения - до тех пор, пока он говорит SSH в stdin/stdout. (Конечно, это работает только с SSH.)

Например, для туннелирования через другой SSH-сервер:

ssh -o ProxyCommand="ssh bastion.tld -W %h:%p" server123.tld

Таким образом, вы можете написать инструмент / скрипт на предпочитаемом вами языке, который принимает имя хоста в командной строке, ищет сервер, открывает TCP-соединение и копирует данные между ним и stdin / out. (Это может быть шеллскрипт с nc .)

Затем используйте это так:

# ~/.ssh/config – see `man ssh_config`

Host *.example.com
    ProxyCommand ~/bin/ssh-cloud-lookup %h %p

Второй вариант - написать собственный DNS-сервер, который использует API вашего контейнера для поиска адресов и предоставления ответов. Я считаю, что я видел, как некоторые инструменты, такие как Chubby, делают именно это.


Третий вариант (специфичный для Linux) - написать плагин "nsswitch", который реализует поиск имени хоста, аналогично существующим плагинам "dns", "mdns", "files". Например, systemd поставляет плагин с именем nss_mymachines для разрешения имен контейнеров nspawn.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .