Назад | Перейти на главную страницу

Сделать SSH-сервер для перенаправления соединения для каждого пользователя

Есть ли способ заставить OpenSSH (или создать какой-либо прокси) перенаправлять одного пользователя на один компьютер, а другого пользователя на другой компьютер только по имени пользователя, которое он (или она) предоставил?

У меня следующая проблема: я собираюсь запустить GitLab в контейнере Docker и одновременно SSH-сервер на хост-машине. GitLab прослушивает SSH-соединения, но его интересует только "git" пользователь, распознающий клиентов по SSH-ключам. Итак, установка, которую я хотел бы создать, может быть любой из следующих:

  1. Прокси-сервер на порту 22 на хост-машине, который перенаправляет весь сеанс в Docker Gitlab, если указан пользователь «git» или на хост SSH (может прослушивать другой порт, важно то, что клиент об этом не знает), когда имя пользователя разные.
  2. Узел SSH обрабатывает всех пользователей, кроме «git», и перенаправляет сеанс в контейнер Docker, если имя пользователя «git».

Для ясности: контейнер Docker запускает мост, и он доступен с хоста по уникальному IP-адресу, отличному от IP-адреса хоста.

Аналогичный вопрос был задан в StackOverflow (https://stackoverflow.com/questions/8505445/setup-ssh-server-to-forward-connections), но не было ответа, который решал бы эту проблему - наиболее полезным был вариант, предлагающий настраиваемую оболочку, но я не нашел способа создать что-то подобное.

Туннелирование TCP-порта SSH настраивается клиентом ssh. На сервере вы можете ограничить конфигурацию туннелирования только с помощью permitopen=host:port в authorized_keys.

Другой способ перенаправить трафик - использовать Netfilter / iptables с -m owner --uid-owner $UID и цель DNAT.