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

14

Necesito configurar un par de túneles ssh desde un script de shell. 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, por lo que mi próxima idea es hacer que el script abra nuevas pestañas en la Terminal y ejecute los comandos allí como procesos en primer plano.

Nota: esta pregunta fue originalmente "¿Cómo puedo lanzar una nueva pestaña de terminal desde el shell y luego ejecutar un comando en ella?", pero tengo dos respuestas sobre cómo tratar con los túneles. Para la pregunta "abriendo un shell", encontré esto en SuperUser , que funcionará, aunque las nuevas pestañas en el fondo serían preferibles a las ventanas de primer plano que se abren.

    
pregunta sprugman 31.08.2011 - 23:21

2 respuestas

21

Esto no es técnicamente una respuesta a la pregunta, sino una respuesta a su problema 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 pone en segundo plano, sin ejecutar ningún comando remoto, sino simplemente manejando el túnel.

Si realmente desea que esto aparezca en una pestaña, es posible que desee una solución diferente.

    
respondido por el zzz 01.09.2011 - 02:08
6

Sugeriría simplemente integrar sus túneles en su conexión "uno para lo que sea". Puede facilitarlo agregando las entradas correspondientes a su archivo ~/.ssh/config :

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

Puede simplemente iniciar sesión ejecutando:

> ssh server2

Los túneles deberían aparecer y comenzar a funcionar, dejándote con una única instancia de SSH para hacer "lo que sea". Si necesita abrir una segunda conexión a server2 , podría obtener un error, sin embargo:

> 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 duele más que tus ojos. También puede configurar estos reenvíos para múltiples servidores agregando líneas similares para otros servidores, y todo esto sucederá de manera automática.

    
respondido por el Jack M. 02.09.2011 - 17:38

Lea otras preguntas en las etiquetas