Actualmente estoy ejecutando un montón de:
sudo ssh -L PORT:IP:PORT root@IP
donde IP es el objetivo de una máquina segura y PORT representa los puertos que estoy reenviando.
Esto se debe a que utilizo muchas aplicaciones a las que no puedo acceder sin este reenvío. Después de realizar esto, puedo acceder a través de localhost:PORT
.
El problema principal ocurrió ahora que en realidad tengo 4 de estos puertos que tengo que reenviar.
Mi solución es abrir 4 shells y buscar constantemente mi historial hacia atrás para buscar exactamente qué puertos necesitan ser reenviados, etc., y luego ejecutar este comando, uno en cada shell (tener que completar contraseñas, etc.).
Si tan solo pudiera hacer algo como:
sudo ssh -L PORT1+PORT2+PORT+3:IP:PORT+PORT2+PORT3 root@IP
entonces eso ya sería de gran ayuda.
¿Hay alguna forma de hacer esto más fácil?
fuente
Exactamente lo que respondió NaN , especifica varios argumentos -L. Hago esto todo el tiempo. A continuación, se muestra un ejemplo de reenvío multipuerto:
Nota : Esto es lo mismo que
-L localhost:8822:REMOTE_IP_1:22
si no lo especificalocalhost
.Ahora con esto, ahora puede (desde otra terminal) hacer:
para conectarse al
REMOTE_IP_1
puerto22
y de manera similar
para conectarse al
REMOTE_IP_2
puerto22
Por supuesto, no hay nada que le impida envolver esto en un script o automatizarlo si tiene muchos hosts / puertos diferentes para reenviar y a ciertos específicos.
Espero que esto ayude.
fuente
By default, anyone (even on different machines) can connect to the specified port on the SSH client machine. However, this can be restricted to programs on the same host by supplying a bind address: ssh -L 127.0.0.1:80:intra.example.com:80 gw.example.com
ssh.com/ssh/tunneling/examplePuede usar la siguiente función bash (solo agréguela a su
~/.bashrc
):Ejemplo de uso:
fuente
-f
para ejecutar en segundo planoPara las personas que reenvían varios puertos a través del mismo host, pueden configurar algo como esto en su ~ / .ssh / config
Host all-port-forwards Hostname 10.122.0.3 User username LocalForward PORT_1 IP:PORT_1 LocalForward PORT_2 IP:PORT_2 LocalForward PORT_3 IP:PORT_3 LocalForward PORT_4 IP:PORT_4
y se convierte en una simple
ssh all-port-forwards
distancia.fuente
jbchichoko y yuval han dado soluciones viables. Pero la respuesta de jbchichoko no es una respuesta flexible como función, y los túneles abiertos por la respuesta de yuval no se pueden cerrar
ctrl+c
porque se ejecutan en segundo plano. Doy mi solución a continuación resolviendo los dos defectos:Definir una función en
~/.bashrc
o~/.zshrc
:Un ejemplo de ejecución de la función:
Resultado de este ejemplo:
Puedes acceder
127.0.0.1:16000~16009
al mismo quehostname:6000~6009
fuente
Uno de los beneficios de iniciar sesión en un servidor con reenvío de puertos es facilitar el uso de Jupyter Notebook. Este enlace proporciona una excelente descripción de cómo hacerlo. Aquí me gustaría hacer un resumen y una expansión para que todos ustedes se refieran.
Situación 1. Inicie sesión desde una máquina local llamada Host-A (por ejemplo, su propia computadora portátil) a una máquina de trabajo remota llamada Host-B.
Luego puede abrir un navegador e ingresar: http: // localhost: port_A / para hacer su trabajo en el Host-B pero verlo en el Host-A.
Situación 2. Inicie sesión desde una máquina local llamada Host-A (por ejemplo, su propia computadora portátil) a una máquina de inicio de sesión remota llamada Host-B y desde allí inicie sesión en la máquina de trabajo remota llamada Host-C. Este suele ser el caso de la mayoría de los servidores analíticos dentro de las universidades y se puede lograr utilizando dos
ssh -L
conectados con-t
.Luego puede abrir un navegador e ingresar: http: // localhost: port_A / para hacer su trabajo en el Host-C pero verlo en el Host-A.
Situación 3. Inicie sesión desde una máquina local llamada Host-A (por ejemplo, su propia computadora portátil) a una máquina de inicio de sesión remota llamada Host-B y desde allí inicie sesión en la máquina de trabajo remota llamada Host-C y finalmente inicie sesión en la máquina de trabajo remota Host- RE. Este no suele ser el caso, pero puede suceder en algún momento. Es una extensión de la Situación 2 y la misma lógica se puede aplicar en más máquinas.
Luego puede abrir un navegador e ingresar: http: // localhost: port_A / para hacer su trabajo en Host-D pero verlo en Host-A.
Tenga en cuenta que port_A, port_B, port_C, port_D pueden ser números aleatorios, excepto los números de puerto comunes que se enumeran aquí . En la situación 1, port_A y port_B pueden ser iguales para simplificar el procedimiento.
fuente
En mi empresa, tanto yo como los miembros de mi equipo necesitamos acceso a 3 puertos de un servidor "objetivo" no accesible, así que creé un túnel permanente (es decir, un túnel que puede ejecutarse en segundo plano de forma indefinida, consulte los parámetros
-f
y-N
) desde un servidor accesible a el objetivo. En la línea de comando del servidor accesible ejecuté:Usé usuario
root
pero tu propio usuario funcionará. Deberá ingresar la contraseña del usuario elegido (incluso si ya está conectado al servidor accesible con ese usuario).Ahora el puerto 8822 de la máquina accesible corresponde al puerto 22 de la de destino (para ssh / PuTTY / WinSCP) y los puertos 9006 y 9100 en la máquina accesible corresponden a los mismos puertos de la de destino (alojan dos servicios web en mi caso ).
fuente
Desarrollé loco para que me ayude con el reenvío ssh. Se puede utilizar para compartir los puertos 5000 y 7000 en forma remota localmente en los mismos puertos:
fuente
Si desea una solución simple que se ejecute en segundo plano y sea fácil de matar, use un conector de control
fuente
Aquí hay una solución inspirada en la de Yuval Atzmon.
Tiene algunos beneficios sobre la solución inicial:
Puede usarlo como:
Y finalmente matarlos a todos con
tnlkill
.fuente
Puedes usar esta función zsh (probablemente también funcione con bash) (Ponlo en
~/.zshrc
):Ejemplos:
ashL [email protected] 6480 7690 7477
ashL [email protected] {6000..6050} # Forwards the whole range. This is simply shell syntax sugar.
fuente