Переадресация локального порта SSH на веб-сайт

447
zallik

Сегодня я обновлял свою память по настройке ssh-туннелей и наткнулся на несколько источников, описывающих переадресацию какого-либо локального порта на веб-сайт. Например: https://www.techrepublic.com/article/how-to-use-local-and-remote-ssh-port-forwarding

«Откройте окно терминала на вашем клиенте и введите команду:

ssh -L 8080: www.slashdot.org: 80 localhost

Вам будет предложено ввести пароль пользователя для клиентского компьютера. По сути, вы подключаетесь через SSH к своему клиентскому компьютеру, но создаете необходимый SSH-туннель к месту назначения. После успешной аутентификации в локальной учетной записи откройте браузер и укажите его http: // localhost: 8080 . Ваш браузер должен автоматически перенаправить вас в Slashdot ».

Только это не сработает, если вы попробуете это. У меня заканчиваются неудачные соединения, 500 ошибок, 404 ошибки и т. Д. Я пробовал другие сайты, даже не https. В чем дело?

0
Вы используете SSH сервер на машине? Если это не так, учебник, на который вы ссылаетесь, не будет работать, Ramhound 5 лет назад 0
Джефф прав, особенно насчет HTTPS. Я запустил `ssh -L 8080: www.slashdot.org: 443 localhost` и все заработало. Но вы должны получить доступ к сайту с помощью `https: // localhost: 8080`, а не` http: // `. confetti 5 лет назад 0

2 ответа на вопрос

2
Jeff Aigner

Этот метод работает, но не очень хорош для доступа к веб-сайтам, так как вам нужно перенаправить порт для каждого домена, к которому осуществляется доступ. Если вы загружаете slashdot в chrome и используете инструменты разработчика, вы можете видеть, что когда вы загружаете slashdot, он на самом деле загружает контент как минимум из 21 разных доменов. Если вы переадресовываете только один домен, вы не увидите весь контент.

Другая проблема заключается в том, что вы туннелируете на порт 80 на сайте, который обслуживает контент через порт 443. Если вы запустите «curl -i slashdot.org», вы увидите, что он выполняет перенаправление 301 на HTTPS. Когда браузер пытается выполнить перенаправление на HTTPS, все не получится.

Вам лучше использовать ssh в качестве SOCKS-прокси и настроить свой браузер для его использования. Вы можете открыть прокси socks на локальном порту следующим образом:

ssh -D 8080 myhost.com 

myhost.com может быть "localhost" в вашем случае, но обычно это удаленный сервер. После того, как вы откроете этот сеанс, просто зайдите в настройки браузера и настройте браузер на использование прокси-сервера SOCKS v5, указывающего на порт localhost 8080 (это проще сделать в firefox, чем в chrome imho). Как только это будет сделано, браузер пропустит весь свой трафик через туннель ssh.

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

Можете ли вы объяснить, почему это обычно удаленный сервер? Я не до конца понимаю это в контексте вопроса ОП. confetti 5 лет назад 0
@confetti Цель использования ssh в качестве прокси-сервера SOCKS состоит в том, чтобы туннелировать ваш трафик через удаленную конечную точку, чтобы замаскировать ваш трафик или получить ваш браузер в сети, в которой находится ваша конечная точка. В первоначальном вопросе ОП он просто использовал localhost для тестирования. Jeff Aigner 5 лет назад 1
О, я вижу, это довольно круто. Я никогда не знал, что настроить SOCKS прокси это так просто. Если я правильно понял OP, хотя он хочет перенаправить определенный сайт на свой локальный хост (и, возможно, IP-адрес локальной сети?) Через порт 8080, я не совсем понимаю, как это будет работать с этим подходом. С другой стороны, я не уверен в том, какова конечная цель ОП. confetti 5 лет назад 0
1
confetti

Джефф абсолютно прав, но я бы хотел добавить решение с локальной переадресацией портов:

Поскольку веб-сайт, к которому вы пытаетесь получить доступ, использует HTTPS, вам необходим доступ к его порту 443.

$ ssh -L 8080:www.slashdot.org:443 localhost 

В дополнение к этому, вы должны использовать https://в браузере, а не http://, так что вы сможете получить доступ к следующим URL в браузере: https://localhost:8080. В Firefox это дало мне предупреждение «незащищенное соединение», так как очевидно, что сертификат SSL, выданный для сайта, к которому вы пытаетесь получить доступ, не был подписан для использования с localhost. Однако вы можете проигнорировать это предупреждение и продолжить.

Похожие вопросы