Рейтинг:1

Обратный прокси-сервер SSH с использованием NGINX. (Поддомены для контейнеров Docker с SSH)

флаг jp

TDLR: x.a.se:22 и у.а.с.:22 должен принять и привести к машине x и машине y соответственно. Nginx просто координирует трафик с помощью обратного проксирования.

Привет, замечательное сообщество, здесь Оскар из Швеции.

Текущая настройка

У меня есть хост-компьютер, который принимает a.se, позвоним хозяину машина А. Так ssh [email protected] приводит к SSH-обслуживание в порту 22 на машина А. Машина А бег докер-контейнерс: машина Б и некоторые другие машины, давайте сосредоточимся на одном контейнере за раз.

Желаемое использование

Я хочу, чтобы это произошло:

  1. Пользователь Боб действующий машина Б не имеет доступа к машина А так как пользователь не является доверенным.
  2. Пользователь Боб подключается к база: 22 с SSH и получает оболочку на машина Б.

Эта проблема

Я не знаю, как это настроить. Я думаю, что ищу обратный прокси SSH. Все мои другие конечные точки перепроксированы с использованием NGINX, так как это то, в чем я лучше всего разбираюсь, поэтому я изучаю ngx_stream_proxy_module который может в основном перевернуть прокси-сервер любых TCP-соединений. Дело в том, что я не могу понять, как потоковый прокси NGINX должен уметь различать a.se, база и скажем н.а.с. куда н любая строка.

Если у вас есть какие-либо вопросы относительно моей настройки или самого вопроса, добавьте комментарий, и я добавлю редактирование к этому вопросу. Заранее спасибо, любая помощь и понимание очень ценятся.

Примечание. На хост-компьютере работает Debian 11, и у меня есть полный доступ. Я предпочитаю Docker в качестве менеджера контейнеров и NGINX для маршрутизации сетевого трафика.

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

флаг us
Это невозможно. SSH не имеет понятия виртуальных хостов, необходимых для его работы. SSH подключается только к IP-адресу после разрешения доменного имени в IP-адрес.
djdomi avatar
флаг za
если не лень установить гуакамоле через докер, то будет почти то же самое :) В остальном можно попробовать аналогичные вещи, которые будут использоваться для smtp https://docs.nginx.com/nginx/admin-guide/mail- прокси/почтовый прокси/
Oscar Andersson avatar
флаг jp
Привет @djdomi, ты имеешь в виду Apache Guacamole? Это не сработает для меня, меня не интересует удаленный рабочий стол, я хочу зашифрованную удаленную оболочку. Прокси-сервер электронной почты не будет работать, так как он поддерживает только POP3, IMAP и SMTP. Спасибо.
Oscar Andersson avatar
флаг jp
Спасибо @TeroKilkanen :) Можете ли вы придумать другой способ? Может быть, я могу направить [email protected] в док-контейнер B через правило в sshd?
djdomi avatar
флаг za
@OscarAndersson ....... Вы должны подумать об упоминании, что часть потока одинакова для любого прокси, который вы хотите использовать.
Oscar Andersson avatar
флаг jp
@djdomi можно уточнить? Я еще не совсем понимаю. Являются ли настройки прокси модуля потоковой передачи и модуля электронной почты взаимозаменяемыми?
Рейтинг:1
флаг us

Можно подключиться к контейнеру, используя хост A в качестве хоста перехода. Однако для этой цели требуется учетная запись пользователя на хосте A.

Можно ограничить учетную запись узла перехода, чтобы не было доступа к самому серверу.

Ограничение может быть сделано на хосте A sshd_config.

Совпадение с пользователем bob
    X11Номер переадресации
    Разрешить TCPForwarding
    ForceCommand ssh bob@<контейнер>

После настройки можно:

  1. ssh [email protected]
  2. Дайте пароль хост-системы
  3. Демон SSH заставит выполнить команду SSH для контейнера
  4. Дайте пароль контейнера

Можно также создать пару ключей на хосте в боб учетная запись, которая будет использоваться для аутентификации в контейнере. Тогда второй пароль не понадобится.

Oscar Andersson avatar
флаг jp
Спасибо, Теро! Это именно то, что я ищу. Я внесу изменения в `sshd_config`. Каковы последствия этого для безопасности, работает ли ForceCommand на клиенте или в службе SSH? Может ли пользователь обойти это? Конечно, я предприму меры безопасности, чтобы даже если это произойдет, не было нанесено никакого ущерба. Как будет работать эта пара ключей на хосте? Я не совсем понимаю, как он будет аутентифицироваться в контейнере. Спасибо. :)
флаг us
`ForceCommand` запускается на сервере SSH, а демон SSH запрещает пользователю выполнять любую другую команду.
Oscar Andersson avatar
флаг jp
Ты финский бог Теро! Большое спасибо с другой стороны большого озера. Что вы думаете о проблеме, когда пользователь выходит из своего док-контейнера, он будет переброшен обратно на хост, верно? Могу ли я исправить это с помощью `ForceCommand sh -c "sudo docker exec -ti user-container0 /bin/bash"; exit`, чтобы сеанс SSH автоматически завершался, когда пользователь покидает оболочку (`/bin/bash`) в контейнере?
флаг us
Если вы используете приведенную выше команду `ssh`, она подключается к демону SSH контейнера Docker. Когда пользователь закрывает оболочку, запущенную демоном SSH, он закрывает соединение, и хост SSH также закрывает соединение. Я не знаю, как работает доступ через команду `docker`.
Oscar Andersson avatar
флаг jp
Ооооооочень круто! Я этого не осознавал, я думал, что ваша команда была просто заполнителем. Такой наивный с моей стороны, огромное спасибо!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.