Создавайте SSH-туннели с помощью любого программного обеспечения

Создавайте SSH-туннели с помощью любого программного обеспечения

В настоящее время у нас есть несколько лабораторий, где все экземпляры находятся в частной подсети, за исключением Bastion VM. Поэтому разработчикам следует создать SSH-туннель от своего ноутбука до Bastion и создать еще один туннель от Bastion до какого-нибудь микросервиса, чтобы они могли получить доступ к пользовательскому интерфейсу.

Процесс выглядит так:

ssh -i <key>.pem -L <port x>:localhost:<port x> user@<hostname of Bastion>
User logged in to Bastion VM.

ssh -i <key>.pem -L <port x>:<hostname of microservice>:<port of microservice> user@<hostname of microservice>
Now they are able to access UI at http://localhost:<port x>

Конечно, это довольно сложная/трудоемкая задача для повседневного использования, поэтому я подумал о настройке программного обеспечения, которое можно настроить так, чтобы оно делало то же самое одним щелчком мыши.

я выяснилБезопасные трубы, но не уверен, как использовать его для моих целей. Может кто-нибудь предложить альтернативу для достижения вышеуказанного с помощью другого программного обеспечения?

решение1

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

Сначала найдите способ сжать его до одной команды SSH. Это фактически немного меняет туннелирование, так как хост-бастион теперь ретранслирует соединение SSH, а не веб-соединения.

ssh -i <key>.pem -o ProxyCommand="ssh -i <key>.pem -W %h:%p user@<bastion>" -L <portX>:<microservice>:<mport> user@<hostname>

В последних версиях OpenSSH это можно упростить еще больше, используя -J/ JumpHostвместо ручного ProxyCommand:

ssh -i <key>.pem -J user@<bastion> -L <portX>:<microservice>:<mport> user@<hostname>

Теперь преобразуйте это в параметры ~/.ssh/config — определите те, которые необходимы для подключения к самому хосту-бастиону, те, которые применяются к хостам служб, и те, которые являются общими для всех них (разделы «Хост» допускают несколько имен и даже подстановочные знаки):

Host <bastion>
    User <user>
    IdentityFile <key>.pem

Host <hostname>
    User <user>
    IdentityFile <key>.pem
    #JumpHost <bastion>
    ProxyCommand ssh -W %h:%p <bastion>

При наличии всего этого (что можно реализовать централизованно) ваша команда становится просто:

ssh -L <portX>:<microservice>:<mport> <hostname>

(Существует также способ автоматического добавления домена компании, например, если сервер называется svc1.dev.example.com, то либо , Hostname %h.dev.example.comлибо CanonicalDomains dev.example.comпозволит вам запустить ssh svc1.)

Это примерно настолько простой метод, насколько это вообще возможно, — остальные четыре параметра по своей сути являются переменными (в зависимости от потребностей каждого разработчика), поэтому даже если вы добавите поверх графический пользовательский интерфейс, пользователю потребуется предоставить тот же объем информации. (Он работает с OpenSSH на любой ОС.)

Тем не менее, еслитакой жетуннели устанавливаются каждый раз, их также можно закодировать в ~/.ssh/config ( -Lсоответствует LocalForward), и разработчику нужно только запустить ssh <hostname>.

(Практически любая ОС, поддерживающая OpenSSH, также поддерживает скрипты, обычно написанные на sh/bash, и/или псевдонимы команд.)

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