Diferencias entre ssh -L a -D

Respuestas:

53

ssh -Labre un puerto local. Todo lo que envía a ese puerto se transfiere a través de la conexión ssh y sale del servidor. Si lo hace, por ejemplo, ssh -L 4444:google.com:80si abre http://localhost:4444en su navegador, verá la página de Google.

ssh -Dabre un puerto local, pero no tiene un punto final específico como con -L. En cambio, pretende ser un proxy SOCKS. Si abre, por ejemplo, ssh -D 7777cuando le dice a su navegador que lo use localhost:7777como su proxy SOCKS, todo lo que solicite su navegador pasará por el túnel ssh. Para el Internet público, es como si estuviera navegando desde su servidor ssh en lugar de hacerlo desde su computadora.

Jessidhia
fuente
66
Un detalle importante sobre -L es que puede vincular un puerto local solo para uso local, por ejemplo localhost: 80: remotehost: 8080, pero también puede vincular ese puerto para cualquier otra persona. Por lo tanto, puede hacer que una máquina en su red local ofrezca acceso a una máquina remota por un túnel, sin que ninguna de las máquinas locales sepa sobre esto.
dividebyzero
@dividebyzero Tengo problemas para imaginar lo que estás describiendo
Michael Dorst
@MichaelDorst Me refiero a esta frase de la página de manual: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:80no funciona para mí, requiere otro parámetro para iniciar sesión, como [email protected]
Saman Mohamadi
6

En SSH, -Despecifica un reenvío de puerto a nivel de aplicación "dinámico" local.

SSH -D [bind_address:]port

Especifica un reenvío de puertos a nivel de aplicación "dinámico" local. Esto funciona mediante la asignación de un socket para escuchar el puerto en el lado local, opcionalmente vinculado a la dirección de enlace especificada. Cada vez que se realiza una conexión a este puerto, la conexión se reenvía a través del canal seguro, y el protocolo de aplicación se utiliza para determinar dónde conectarse desde la máquina remota. Actualmente, los protocolos SOCKS4 y SOCKS5 son compatibles, y ssh actuará como un servidor SOCKS. Solo root puede reenviar puertos privilegiados. Los reenvíos de puertos dinámicos también se pueden especificar en el archivo de configuración.

Las direcciones IPv6 se pueden especificar con una sintaxis alternativa: puerto [bind_address /] o encerrando la dirección entre corchetes.

Solo el superusuario puede reenviar puertos privilegiados. De forma predeterminada, el puerto local está vinculado de acuerdo con la configuración de GatewayPorts. Sin embargo, se puede usar una dirección de enlace explícita para vincular la conexión a una dirección específica. Bind_address de "localhost" indica que el puerto de escucha está vinculado solo para uso local, mientras que una dirección vacía o '*' indica que el puerto debe estar disponible en todas las interfaces.

Además, ssh -Lespecifica que el puerto dado en el host local (cliente) debe reenviarse al host y puerto dados en el lado remoto.

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

Especifica que el puerto dado en el host local (cliente) debe reenviarse al host y puerto dados en el lado remoto. Esto funciona mediante la asignación de un socket para escuchar el puerto en el lado local, opcionalmente vinculado a la dirección de enlace especificada. Cada vez que se realiza una conexión a este puerto, la conexión se reenvía a través del canal seguro y se establece una conexión al puerto host del puerto host desde la máquina remota. Los reenvíos de puertos también se pueden especificar en el archivo de configuración. Las direcciones IPv6 se pueden especificar con una sintaxis alternativa: [bind_address /] port / host / hostport o encerrando la dirección entre corchetes.

Solo el superusuario puede reenviar puertos privilegiados. De forma predeterminada, el puerto local está vinculado de acuerdo con la configuración de GatewayPorts. Sin embargo, se puede usar una dirección de enlace explícita para vincular la conexión a una dirección específica. Bind_address de "localhost" indica que el puerto de escucha está vinculado solo para uso local, mientras que una dirección vacía o '*' indica que el puerto debe estar disponible en todas las interfaces.

Mughil
fuente