![Доступ к локальному туннелированию SSH через опубликованный порт Docker](https://rvso.com/image/1654583/%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC%D1%83%20%D1%82%D1%83%D0%BD%D0%BD%D0%B5%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E%20SSH%20%D1%87%D0%B5%D1%80%D0%B5%D0%B7%20%D0%BE%D0%BF%D1%83%D0%B1%D0%BB%D0%B8%D0%BA%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D1%80%D1%82%20Docker.png)
У меня следующая настройка:
[OpenSSH server] <---> [Docker container with SSH client] <---> [host machine]
Мой контейнер Docker — это своего рода менеджер подключений SSH. Служба, запущенная на сервере OpenSSH, порт которого я перенаправляю, является веб-сервером.
Изнутри контейнера я могу успешно curl
туннелировать порт. Однако, когда я пытаюсь опубликовать тот же порт на моем хосте и пытаюсь curl
с хоста, я получаю
curl: (56) Recv failure: Connection reset by peer
Вот команда SSH, которую я использую для настройки туннеля:
ssh -nNT -L 3000:*:9413 OPENSSH_SERVER_URL
Я запускаю этот контейнер с помощью
docker run --rm --name test -p 3000:3000 ssh-connection-manager
Если я войду в контейнер, то смогу curl
получить ответ:
docker exec -it --entrypoint sh test
# curl localhost:3000
Hello!
Я не могу сделать то же самое с хоста через опубликованный порт:
$ curl localhost:3000
curl: (56) Recv failure: Connection reset by peer
Что я упускаю? Подозреваю, что это опция подключения на клиенте SSH или конфигурация на моем сервере OpenSSH, но я не уверен.