Вопрос или проблема
Мне понадобилось некоторое время, чтобы разобраться в этом, но наконец я заставил удаленную портовую пересылку работать с ssh следующим образом:
ssh -N -i /etc/ssh/id_rsa [email protected] -R 8080:localhost:80 -C -v
Локальный сервер использует закрытый ключ для подключения к удаленному серверу, на котором настроен открытый ключ. Успешная аутентификация, ошибок в журнале нет. Последняя строка, которую выводит ssh:
debug1: remote forward success for: listen 8080, connect localhost:80
Я пытался протестировать это с моего публичного сайта, следующим образом:
- http://www.somewhere.com
- http://www.somewhere.com:8080
- https://www.somewhere.com
- https://www.somewhere.com:8080
Однако ничего не происходит – по-прежнему вижу эту строку:
debug1: remote forward success for: listen 8080, connect localhost:80
Если я тестирую локально на удаленном сервере, используя http://127.0.0.1:8080, это работает отлично.
ПРИМЕЧАЕТЕ: Следующее установлено в sshd_config на удаленном сервере:
- AllowTcpForwarding yes
- GatewayPorts yes
Не уверен, что я упускаю…
Цитата из man ssh
По умолчанию, сокеты TCP на сервере будут привязаны только к интерфейсу обратной связи. Это можно переопределить, указав bind_address. Пустой bind_address или адрес ‘*’ указывают, что удаленный сокет должен слушать на всех интерфейсах. Указание удаленного bind_address будет успешно только в том случае, если опция GatewayPorts сервера включена (см. sshd_config(5)).
Kakskdkdzkmswmnenenekxisjsjwkekxj dnenejejdixidkenenensjdjxjxxjdnensnwwnsnsjxjxjxjdjsnsnsjsjxjxkaoweiethwjakanznc
Ответ или решение
Проблема с удалённым портом Forwarding SSH: Ответ и возможные решения
Вы столкнулись с проблемой, когда удалённый порт Forwarding в SSH работает корректно (вы видите сообщение debug1: remote forward success for: listen 8080, connect localhost:80
), но доступ к нему извне не удаётся. Рассмотрим возможные причины этой проблемы и способы их устранения.
1. Проверка конфигурации sshd_config
Как вы упомянули, у вас установлены следующие параметры в файле конфигурации sshd_config
на удалённом сервере:
AllowTcpForwarding yes
GatewayPorts yes
Эти параметры необходимы для успешной работы удалённого порт-форвардинга. Убедитесь, что они действительно прописаны правильно, и перезапустите службу SSH, чтобы изменения вступили в силу:
sudo systemctl restart sshd
2. Указание адреса привязки
При использовании -R
в вашей команде SSH не указывается адрес, что может означать привязку к локальному интерфейсу (т.е. localhost
), который недоступен снаружи. Чтобы разрешить доступ к порту 8080 извне, вы можете явно указать, что порт должен слушать на всех интерфейсах, добавив 0.0.0.0
:
ssh -N -i /etc/ssh/id_rsa [email protected] -R 0.0.0.0:8080:localhost:80 -C -v
3. Проверка брандмауэра
Убедитесь, что на удалённом сервере нет правил брандмауэра, блокирующих подключение к порту 8080. Например, если на сервере используется ufw
или iptables
, выполните следующие команды, чтобы проверить и изменить настройки:
Для ufw
:
sudo ufw allow 8080
Для iptables
:
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
4. Проблемы с доступом к сети
Если сервер расположен за NAT или в облаке, проверьте настройки вашей сети. Убедитесь, что внешний IP-адрес вашего удалённого сервера доступен и что все необходимые маршруты настроены.
5. Тестирование доступа
После внесения изменений, попробуйте снова получить доступ к http://www.somewhere.com:8080
с другого устройства в сети. Используйте команды curl
или wget
, чтобы исключить проблемы с браузером:
curl http://www.somewhere.com:8080
Заключение
Если вы последовали всем вышеуказанным шагам, но проблема все же осталась, рекомендуется проверить журналы SSH для получения дополнительной информации и устранения неполадок. Логи можно посмотреть с помощью команды:
sudo journalctl -u sshd
Если ничего из вышеперечисленного не работает, возможно, имеет смысл обратиться к системному администратору для дальнейшей диагностики.
Успехов в решении проблемы!