Рейтинг:0

Как пробросить порт 8080 с удаленного сервера на клиент с клиента с помощью туннеля ssh?

флаг ke

Я установил GitLab в докер на удаленной машине. Теперь я хотел бы перенаправить порт 8080 с этой удаленной машины на мой локальный порт 8080.

На дальней машине:

sudo docker run --detach --hostname gitlab.example.com --publish 443:443 --publish 8080:80 --publish 2222:22 --name gitlab --restart always --volume $GITLAB_HOME/config:/etc /gitlab --volume $GITLAB_HOME/logs:/var/log/gitlab --volume $GITLAB_HOME/data:/var/opt/gitlab gitlab/gitlab-ce:latest

На моей локальной машине:

ssh -N -o "ExitOnForwardFailure yes" -R 8080:localhost:8080 someuser@the-distant-server -vvv

Я получаю следующую ошибку:

debug1: залог: сеть
debug3: получить пакет: введите 80
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug3: получить пакет: тип 4
debug1: Удаленный: /home/someuser/.ssh/authorized_keys:1: параметры ключа: агент-переадресация переадресация портов pty user-rc x11-forwarding
debug3: получить пакет: введите 82
debug1: сбой удаленной переадресации для: прослушать 8080, подключиться к локальному хосту: 8080
Ошибка: сбой переадресации удаленного порта для порта прослушивания 8080

И действительно, в /var/log/auth.log, я получаю следующую ошибку:

9 июля 16:51:42 удаленный сервер sshd[2723782]: Принят открытый ключ для некоторого пользователя с порта 192.168.200.182 44850 ssh2: RSA SHA256:
9 июля 16:51:42 удаленный сервер sshd[2723782]: pam_unix(sshd:session): сеанс открыт для пользователя someuser пользователем (uid=0)
9 июля 16:51:42 удаленный сервер systemd-logind[1083]: новый сеанс 116923 пользователя someuser.
9 июля 16:51:42 удаленный сервер systemd[2723795]: pam_unix(systemd-user:session): сеанс открыт для пользователя someuser пользователем (uid=0)
9 июля 16:51:43 удаленный сервер sshd [2723812]: ошибка: привязка [127.0.0.1]: 8080: адрес уже используется
9 июля 16:51:43 удаленный сервер sshd [2723812]: ошибка: channel_setup_fwd_listener_tcpip: невозможно прослушать порт: 8080
9 июля 16:51:43 удаленный сервер sshd[2723782]: pam_unix(sshd:session): сеанс закрыт для пользователя someuser
9 июля 16:51:43 удаленный сервер systemd-logind[1083]: сеанс 116923 вышел из системы. Ожидание завершения процессов.
9 июля 16:51:43 удаленный сервер systemd-logind[1083]: удален сеанс 116923.

Это говорит мне bind [127.0.0.1]:8080: адрес уже используется.

  1. Я не понимаю, как я могу слушать порт 8080 с удаленной машины, если ни один процесс не может писать на него. Я думаю, что у меня неправильное понимание того, как здесь работают порты/прослушивание/запись/ssh.
  2. Как я могу исправить ssh чтобы заставить этот туннель работать и получить доступ к экземпляру GitLab на моем 127.0.0.1:8080?
Рейтинг:1
флаг kz

Краткий ответ: используйте переключатель ssh вместо .

Объяснение. На удаленной машине вы открываете контейнер докеров, который публикует порт 8080. В деталях это означает, что хост-докер открывает СЛУШАТЬ socket и ждите входящих подключений.

Существует два типа перенаправления портов: -L и -R:

  • открывает сокет прослушивания на вашем локальном компьютере и перенаправляет это входящее соединение через ssh-туннель, а также открывает соединение на удаленном хосте по указанному адресу (локальный: 8080 в данном случае это именно то, что вам нужно)
  • работает наоборот: он ожидает входящих соединений на удаленной машине и перенаправляет их на локальный хост. Это, конечно, терпит неудачу, потому что у вас уже есть сокет прослушивания, сидящий по этому адресу (контейнер докера!)

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

vinzee avatar
флаг ke
Я впервые читаю о сокетах `LISTEN`, когда ищу объяснения по туннелям ssh. Стало все намного понятнее.
Martin avatar
флаг kz
вам определенно следует ознакомиться с основами работы с сетями TCP. Неудивительно, что вы неправильно поняли параметры ssh-туннеля...

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

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