Различия между SSH -L для -D

52

Я пытаюсь понять разницу между ssh -L к -D. Есть ли что-нибудь еще, кроме этого - только носки?

Благодарность!


источник

Ответы:

53

ssh -Lоткрывает локальный порт. Все, что вы отправляете на этот порт, проходит через соединение ssh и уходит через сервер. Если вы это сделаете, например, ssh -L 4444:google.com:80если вы откроете http://localhost:4444в своем браузере, вы действительно увидите страницу Google.

ssh -Dоткрывает локальный порт, но у него нет конкретной конечной точки, как с -L. Вместо этого он притворяется SOCKS-прокси. Если вы откроете, например, ssh -D 7777когда вы скажете браузеру использовать в localhost:7777качестве прокси-сервера SOCKS, все запросы вашего браузера будут проходить через туннель ssh. Для общедоступного интернета все выглядит так, как будто вы просматривали его со своего ssh-сервера, а не со своего компьютера.

Jessidhia
источник
6
Одна важная деталь о -L заключается в том, что вы можете связать локальный порт только для локального использования, например, localhost: 80: remotehost: 8080, но вы также можете связать этот порт для любого другого. Таким образом, вы можете сделать так, чтобы машина в вашей локальной сети предоставляла доступ к удаленной машине по туннелю, и ни одна из локальных машин не знала об этом.
делюбезеро
@dividebyzero У меня проблемы с изображением того, что вы описываете
Майкл Дорст
@MichaelDorst Я имею в виду это предложение из страницы руководства:The bind_address of “localhost” indicates that the listening port be bound for local use only, while an empty address or ‘*’ indicates that the port should be available from all interfaces.
dividebyzero
ssh -L 4444:google.com:80у меня не работает, для входа требуется другой параметр, например user@example.com
Саман Мохамади
6

В SSH -Dуказывает локальную «динамическую» переадресацию портов уровня приложения.

SSH -D [bind_address:]port

Определяет локальную «динамическую» переадресацию портов уровня приложения. Это работает путем выделения сокета для прослушивания порта на локальной стороне, необязательно привязанного к указанному адресу bind_address. Всякий раз, когда устанавливается соединение с этим портом, оно перенаправляется по безопасному каналу, а затем протокол приложения используется для определения того, к чему подключаться с удаленного компьютера. В настоящее время поддерживаются протоколы SOCKS4 и SOCKS5, и ssh будет выполнять роль сервера SOCKS. Только root может пересылать привилегированные порты. Переадресация динамических портов также может быть указана в файле конфигурации.

Адреса IPv6 можно указывать с альтернативным синтаксисом: порт [bind_address /] или заключая адрес в квадратные скобки.

Только суперпользователь может пересылать привилегированные порты. По умолчанию локальный порт связан в соответствии с настройкой GatewayPorts. Однако явный адрес bind_address может использоваться для привязки соединения к определенному адресу. Bind_address «localhost» указывает, что прослушивающий порт должен быть привязан только для локального использования, в то время как пустой адрес или «*» указывает, что порт должен быть доступен со всех интерфейсов.

Кроме того, ssh -LУказывает, что данный порт на локальном (клиентском) хосте должен быть перенаправлен на данный хост и порт на удаленной стороне.

SSH -L [bind_address:]port:host:hostport

Указывает, что данный порт на локальном (клиентском) хосте должен быть перенаправлен на данный хост и порт на удаленной стороне. Это работает путем выделения сокета для прослушивания порта на локальной стороне, необязательно привязанного к указанному адресу bind_address. Всякий раз, когда устанавливается соединение с этим портом, оно перенаправляется по безопасному каналу, и устанавливается соединение с портом хоста с удаленного компьютера. Переадресация портов также может быть указана в файле конфигурации. Адреса IPv6 могут быть указаны с альтернативным синтаксисом: [bind_address /] port / host / hostport или заключив адрес в квадратные скобки.

Только суперпользователь может пересылать привилегированные порты. По умолчанию локальный порт связан в соответствии с настройкой GatewayPorts. Однако явный адрес bind_address может использоваться для привязки соединения к определенному адресу. Bind_address «localhost» указывает, что прослушивающий порт должен быть привязан только для локального использования, в то время как пустой адрес или «*» указывает, что порт должен быть доступен со всех интерфейсов.

Mughil
источник