ssh -L reenvía múltiples puertos
Actualmente estoy ejecutando un montón de:
sudo ssh -L PORT:IP:PORT root@IP
donde IP es el destino de una máquina segura y PORT representa los puertos que estoy reenviando.
Esto se debe a que uso 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 tengo 4 de estos puertos que debo reenviar.
Mi solución es abrir 4 shells y buscar constantemente en mi historial hacia atrás para buscar exactamente qué puertos deben reenviarse, 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 ayudaría mucho.
¿Hay alguna manera de hacerlo más fácil?
La -L
opción se puede especificar varias veces dentro del mismo comando. Cada vez con diferentes puertos. Es decirssh -L localPort0:ip:remotePort0 -L localPort1:ip:remotePort1 ...
Exactamente lo que respondió NaN , especifica múltiples argumentos -L. Hago esto todo el tiempo. A continuación se muestra un ejemplo de reenvío multipuerto:
ssh remote-host -L 8822:REMOTE_IP_1:22 -L 9922:REMOTE_IP_2:22
Nota : Esto es lo mismo que -L localhost:8822:REMOTE_IP_1:22
si no especifica localhost
.
Ahora con esto, ya puedes (desde otra terminal) hacer:
ssh localhost -p 8822
para conectarse al REMOTE_IP_1
puerto22
y de manera similar
ssh localhost -p 9922
para conectarse al REMOTE_IP_2
puerto22
Por supuesto, no hay nada que le impida incluir esto en un script o automatizarlo si tiene muchos hosts/puertos diferentes para reenviar y a ciertos específicos.
Para las personas que reenvían múltiples 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.
Puede utilizar la siguiente función bash (simplemente agréguela a su ~/.bashrc
):
function pfwd {
for i in ${@:2}
do
echo Forwarding port $i
ssh -N -L $i:localhost:$i $1 &
done
}
Ejemplo de uso:
pfwd hostname {6000..6009}