Возможна ли такая конфигурация:
В результате команда ssh git@host
даст тот же результат, что и ssh -p 2222 git@host
.
В основном я стараюсь иметь своего рода обратный прокси-сервер на ssh, но, поскольку я знаю, что мы не можем использовать поддомены для различения входящего соединения ssh, мне было интересно, можем ли мы выполнить такие вещи с пользовательским подходом.
Редактировать:
Причина в том, что я настроил сервер gitolite в контейнере Docker, поэтому в конце у меня есть демон ssh, который прослушивает порт 2222 для целей git. Кроме того, у меня есть «обычный» демон ssh, который прослушивает порт 22 (и я хочу его оставить).
Конечно, я могу получить доступ к серверу git через порт 2222 (если я открою его извне), но мне было интересно, могу ли я использовать «обычный» ssh-сервер с удаленного компьютера, а затем локально перенаправить его на ssh «git» для Пользователь git
.
Так что для пользователя git трафик будет примерно таким:
client <==> 22:server:2222:git_container
Настройте свой обычный 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% правильным, поиграйте с опциями)