Я должен управлять целой кучей хостов через SSH. Однако я могу получить к ним доступ только через определенный шлюз ssh-сервера.
У меня есть следующее в моем ~/.ssh/config
:
Host mygateway-www
Hostname www
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22
Однако я должен подключиться ко многим из этих машин. Вместо того, чтобы помещать десятки записей в мою ~/.ssh/config
, есть ли у меня что-то вроде этого:
Host mygateway-*
Hostname ???WHAT GOES HERE????
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22
Я знаю, что вы можете использовать %h
в Hostname
аргументе, но это будет имя хоста. Что мне действительно нужно, так это какая-то подстановка строк, например, bash ${VAR%thingie}
. Это возможно?
Похоже, нет никакого способа сделать это.
источник
У меня была похожая проблема, и в итоге я написал сценарий, который сгенерировал весь шаблон для меня. Я больше не изменяю ~ / ssh / config, я изменяю ~ / ssh / config.in и перезапускаю свой скрипт.
источник
.ssh/config.d
файл для каждого шаблона, где каждый шаблон будет генерировать одну или несколько записей в финале~/.ssh/config
. Там также будет файл с универсальными переменными, но каждый шаблон может иметь свои собственные переменные, которые будут иметь приоритет над глобальными, перечисленными в верхней части.~/.ssh/config
Файл может быть создан по требованию или по расписанию, она не имеет значения, до тех пор , как вы никогда не делали прямые изменения в нем , что вы хотели сохранить.Игнорируйте указание переопределения имени хоста напрямую через
Hostname
объявление и вместо этого определяйте его во время выполнения. Сделайте это, оценив его как частьProxyCommand
, используя%h
для ссылки на него в команде (также используйте%p
вместо порта жесткого кодирования как 22), т.е.Можно даже иметь более общий раздел, в соответствии с которым вы можете указать любой хост без a,
-
который будет обрабатываться как есть, или как в другом подходящем разделе (строках), но есть общий-
подход для указания любого<gateway>-<target>
:Кроме того, более новые версии клиента SSH поддерживают
[-W host:port]
возможность напрямую выполнять ту же функцию, что иnc
(netcat). Таким образом, мы можем использовать модифицированные:Конечно, если у вас есть ограниченный список хостов, вы всегда можете сделать:
Надеюсь это поможет!
источник
У меня был клиент с такой же настройкой, и я использовал DSSH для решения своей проблемы.
DSSH среди прочего позволяет вам прозрачно входить в систему удаленных хостов через хост шлюза.
Случаи использования
источник