19 votos

¿Cómo gestionar los túneles como procesos en segundo plano desde un shell script?

Necesito configurar un par de túneles ssh desde un shell script. He intentado ejecutarlos como tareas bg usando:

#!/bin/sh
ssh -L 3000:server1:5029 me@server2 &
ssh -L 3001:server3:3306 me@server2 &

pero los túneles no parecen funcionar correctamente cuando los lanzo de esa manera.

Funcionan bien cuando los configuro manualmente en sus propias pestañas, así que mi siguiente idea es hacer que el script abra nuevas pestañas en Terminal y ejecute los comandos allí como procesos en primer plano.

Nota: esta pregunta era originalmente "¿Cómo puedo lanzar una nueva pestaña de terminal desde el shell y luego ejecutar un comando en ella?", pero obtuve dos respuestas sobre el manejo de los túneles. Para la pregunta de "abrir un shell", encontré esto en SuperUser , que funcionará, aunque sería preferible que las nuevas pestañas estuvieran en segundo plano en lugar de las ventanas en primer plano que abre.

27voto

Esto no es técnicamente una respuesta a la pregunta formulada, sino una respuesta a su problema tal y como se describe. El comando ssh tiene dos interruptores que pueden ser útiles para usted:

ssh -f -N -L 3000:server1:5029 me@server2

le dice a ssh que permanezca en primer plano el tiempo suficiente para pedir las contraseñas necesarias, y luego se ponga en segundo plano, sin ejecutar ningún comando remoto, sino sólo manejando el túnel.

Si realmente quiere que esto aparezca en una pestaña, entonces puede querer una solución diferente.

7voto

roo Puntos 3294

Yo sugeriría simplemente integrar sus túneles en su conexión "uno para todo". Puedes hacerlo fácil añadiendo las entradas apropiadas a tu ~/.ssh/config archivo:

Host server2
    HostName 10.1.1.1
    User me
    LocalForward 3000 127.0.0.1:5029
    LocalForward 3001 127.0.0.1:3306

A continuación, puede iniciar la sesión simplemente ejecutando:

> ssh server2

Los túneles deberían aparecer y empezar a funcionar, dejándote con una única instancia SSH en la que hacer "lo que sea". Si necesitas abrir una segunda conexión a server2 Sin embargo, es posible que obtenga un error:

> ssh server2
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3000
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3001
Could not request local forwarding.

Esto no daña nada más que tus ojos. También puede configurar estos reenvíos para múltiples servidores añadiendo líneas similares para otros servidores, y todo ocurriría de forma automática.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X