Agregar reenvíos de puertos mediante programación en una sesión ControlMaster SSH

9

Me acabo de enterar de la función ControlMaster / ControlPath de OpenSSH, que le permite utilizar una única conexión SSH para ejecutar múltiples terminales.

Como a menudo uso SSH para usar el reenvío de puertos para obtener sesiones VNC encriptadas y autenticadas, reconocí al instante que no puede agregar reenvíos de puertos a un servidor remoto para el que ya tiene una conexión establecida. Esto apesta.

Algunas veces más tarde descubrí que puede eludir esta limitación escribiendo ~ C en una sesión de terminal SSH en ejecución. Esto abre una línea de comandos que le permite agregar o eliminar reenvíos de puertos.

Mi pregunta ahora es: ¿Cómo puedo agregar reenvíos de puertos en una sesión SSH existente que está utilizando la función ControlMaster / ControlPath, sin la necesidad de tener acceso a una sesión de terminal dentro de esa sesión SSH? Necesito esto para habilitar mi script que inicia una conexión VNC tunelizada segura para que pueda agregar y luego eliminar sus reenvíos de puertos.

(Sé que podría usar un multiplexor de terminal como GNU Screen o tmux, en realidad ya lo estoy haciendo. Pero me gusta la idea de usar solo una sesión SSH por varias razones).

aef
fuente
1
Me veré atrapado para ver si encuentras una manera de hacer esto, pero sospecho que no lo harás. Controlar de forma programática las propiedades de una sesión SSH de la que no eres parte parece un gran problema de seguridad.
Caleb
1
¡Disparates! ¿Cómo el control programático de las propiedades de una sesión SSH introduce un gran problema de seguridad? La solución es realmente bastante simple: serverfault.com/a/340361/93109
aculich
La pregunta ahora es solo sobre agregar reenvíos de puertos para que coincida mejor con la respuesta aceptada. Luego
aef

Respuestas:

9

Eso es bastante simple, en realidad. Simplemente agregue ctl_cmd -O forwarda su comando existente, por lo tanto:

ssh -M -L5555:localhost:22 remotehost

se convierte en:

ssh -O forward -M -L5555:localhost:22 remotehost

La sshpágina man discute la -O ctl_cmdopción:

-O ctl_cmd
        Control an active connection multiplexing master process.  When the -O option is
        specified, the ctl_cmd argument is interpreted and passed to the master process.
        Valid commands are: “check” (check that the master process is running), “forward”
        (request forwardings without command execution), “exit” (request the master to
        exit), and “stop” (request the master to stop accepting further multiplexing
        requests).

Esto, por supuesto, asume que has habilitado ControlMaster yesen tu ~/ssh/configarchivo o -Men la línea de comando.

aculich
fuente
1
¿Podría intentar responder la pregunta relacionada aquí: serverfault.com/q/457295/50950
aef