El túnel SSH es muy confuso para mí. Me pregunto si puedo hacer esto en Linux.
Tengo 3 maquinas ..
A. My local machine at home.
B. Machine at work that I can SSH into (middle man).
C. My desktop at work that I can only SSH into from machine B.
Entonces puedo SSH desde A -> B y desde B -> C, pero no desde A -> C.
¿Hay alguna manera de configurar un túnel SSH de A a B, de modo que cuando ejecuto otros comandos SSH, simplemente funcionan desde mi máquina local A? Básicamente estoy tratando de clonar un repositorio de git del trabajo al hogar (y no puedo instalar git en la máquina B).
Además, una vez configurado ... ¿Cómo lo desarmaría también?
Respuestas:
Coloque esto en su
.ssh/config
archivo en hostA (vea man 5 ssh_config para más detalles):Ahora el siguiente comando se tunelizará automáticamente a través de hostB
Es posible que desee agregar opciones como
-oCiphers=arcfour
y-oClearAllForwardings=yes
acelerar las cosas, ya que envolverlo en elssh
interiorssh
es computacionalmente más costoso y el esfuerzo adicional y el contenedor no necesitan ser tan seguros cuando está canalizando el tráfico ya cifrado.Si está utilizando OpenSSH anterior a 5.3, la
-W
opción no está disponible. En este caso, puede implementar lo anterior usando netcat (nc
):fuente
-W
opción debe usarse en lugar de lanc
opción.-W
, solo el del hostA (el origen) o también el del hostB (la máquina central)?hostB
, es posible declarar variasHost hostC
líneas por encima,ProxyCommand
lo que hace que sea muy fácil acceder a varios hosts a través del servidor central.Editar: este es el enfoque equivocado. Ver la respuesta de ephemient en su lugar. Esta respuesta funcionará, pero es potencialmente menos segura y definitivamente menos sorprendente.
Parece que quiere una solución como la siguiente:
Esto te pondrá una cáscara
machineb
. Deja esto solo; minimizar la ventana de terminal.Ahora, cada vez que realice una conexión ssh
localhost
, estará conectado amachinec
través demachineb
. Cuando haya terminado con el túnel, simplemente cierre la terminal en la que ejecutó el comando anterior.Tenga en cuenta que necesitará privilegios de superusuario para ejecutar el comando.
fuente
-p 8022
a sus comandos ssh. Y es muy fácil con git: usa el URIssh://localhost:8022/path/to/repo.git
.Suena como si quisieras un alias de shell en A que hace que ssh ocurra en C
fuente
-t
a las opciones externas de ssh si desea un shell interactivo, ya quessh
supone-T
si se le da un comando.Para el shell interactivo, puede usar este comando simple:
Las opciones -J son para saltar .
fuente
Si su empleador proporciona una VPN, le recomiendo que la use.
De esa manera, no tendrá que configurar ninguna aplicación especialmente (incluso ssh), y puede ver cualquier máquina detrás del firewall. Además, todo su tráfico será encriptado por el software VPN, que agregará seguridad a cualquier tráfico no encriptado de forma inadvertida o deliberada.
fuente
YASS, otra solución simple
-f
parámetro le dice a SSH que vaya al fondo una vez establecida la conexiónsleep 10
se necesitan comandos para mantener la conexión hasta que el segundo comando ssh use el puerto reenviado. Luego, el primer ssh se cerrará cuando el segundo ssh deje el puerto reenviado.ahora puede ejecutar sesiones ssh posteriores:
Variante:
Las sesiones ssh posteriores pueden abrirse ejecutando:
La principal ventaja de usar -M y -S param es que solo una conexión está abierta de HostA a HostC, la sesión posterior no se autenticará nuevamente y se ejecutará mucho más rápido.
fuente
Caso especial, plataformas mixtas de nix:
hostA (linux) -> HostB (solaris) -> HostC (linux)
Si necesita una aplicación X en hostC, y el salto intermedio está en la caja de Solaris ... en este caso encontré el netcat (nc) necesario en el ProxyCommand así:
hostA: ~ $ vi .ssh / config:
Entonces el túnel automático funciona:
hostA: ~ $ ssh hostC
fuente