Перенаправление трафика ssh для одного пользователя через другой порт

Возможно ли иметь такую ​​конфигурацию:

  • Сервер, который прослушивает SSH-соединения на порт 22 как обычно
  • Для одного пользователя (скажем, git) перенаправить весь трафик через другой порт (например, 2222)

В результате команда ssh git@host даст тот же результат, что и ssh -p 2222 git@host,

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

Редактировать:

Причина в том, что я настроил сервер gitolite в контейнере Docker, поэтому в конце у меня есть демон ssh, который прослушивает порт 2222 для целей git. Кроме того, у меня есть "обычный" демон ssh, который прослушивает порт 22 (и я хочу сохранить его).

Конечно, я могу получить доступ к git-серверу через порт 2222 (если я открою его снаружи), но мне было интересно, могу ли я использовать "обычный" ssh-сервер с удаленного компьютера, а затем локально перенаправить его на "git" ssh для Пользователь git,

Так что трафик будет примерно таким для пользователя git:

client <==> 22:server:2222:git_container

3 ответа

Вы можете настроить пользователя git на основном хосте (тот, на котором заканчивается: 22) и использовать файл этого пользователя для принудительной пересылки на другой ssh-сервер. authorized_keysфайл будет выглядеть так:

      command="ssh -p 2222 git@localhost",restrict ecdsa-sha2-nistp521 AAAAE....

Вам придется сохранить закрытый ключ пользователя git@:2222 в файле пользователя git@:22..ssh/каталог. Альтернативой является использование ssh-агента на клиенте и включение пересылки агента на клиентском соединении.

Принудительная команда также может быть установлена ​​вMatchблокировать/etc/ssh/sshd_config.

Настройте свой обычный сервер SSH для прослушивания нестандартного порта. Затем вы можете настроить gitolite для использования свободного порта 22.

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

Простая переадресация TCP-порта не может этого сделать: имя пользователя упоминается только в протоколе SSH, поэтому, если вы настаиваете на запуске с ssh git@host, тогда должно быть два полных рукопожатия аутентификации SSH. Я не знаю об общем SSH-прокси, который мог бы сделать это прозрачно. Вы можете автоматизировать серверную часть второго прыжка, например, создав сценарий оболочки ssh -p 2222 localhost оболочка пользователя на внешнем хосте. Но это было бы несовместимо с множеством хороших привилегий SSH, таких как переадресация портов, sftp, scp,...

Лучшим способом было бы настроить клиентскую часть. Например, в ~/.ssh/config

Host git_host
    Hostname host
    Port     2222
    Username git

а потом ssh git_host (вместо ssh git@host).

Если вам сначала нужно пройти через внешний хост (например, из-за отсутствия прямой видимости на порт 2222), вы можете использовать эти приемы здесь, например:

Host git_host
    Hostname host
    Username git
    ProxyCommand ssh -q git@host nc -q0 localhost 2222

(может быть не на 100% правильно, поиграйтесь с опциями)

Другие вопросы по тегам