Перенаправление трафика 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% правильно, поиграйтесь с опциями)