Ajout de transferts de ports par programme sur une session ControlMaster SSH

Je viens de découvrir la fonctionnalité ControlMaster / ControlPath d'OpenSSH, qui vous permet d'utiliser une seule connexion SSH pour exécuter plusieurs terminaux.

Comme j'utilise souvent SSH pour utiliser le renvoi de port pour obtenir des sessions VNC cryptées et authentifiées, j'ai immédiatement reconnu que vous ne pouvez pas ajouter de renvoi de port à un serveur distant auquel vous avez déjà une connexion établie. C'est une merde.

Parfois, plus tard, j'ai découvert que vous pouvez contourner cette limitation en tapant ~ C dans une session de terminal SSH en cours d'exécution. Cela ouvre une ligne de commande qui vous permet d'ajouter ou de supprimer des renvoi de port.

Ma question est maintenant: Comment puis-je ajouter des renvois de ports sur une session SSH existante qui utilise la fonction ControlMaster / ControlPath, sans avoir besoin d'accéder à une session de terminal à l'intérieur de cette session SSH. J'ai besoin de cela pour activer mon script qui démarre une connexion VNC tunneled sécurisée pour moi d'ajouter et ensuite supprimer ses renvois de port.

(Je sais que je pourrais utiliser un multiplexeur terminal tel que GNU Screen ou tmux, en fait je le fais déjà. Mais j'aime l'idée d'utiliser une seule session SSH pour des raisons multiples.)

C'est assez simple, en fait. Il suffit d'ajouter le ctl_cmd -O forward à votre commande existante, ainsi:

 ssh -M -L5555:localhost:22 remotehost 

devient:

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

La page de manuel ssh traite de l'option -O ctl_cmd :

 -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). 

Ceci, bien sûr, suppose que vous avez activé ControlMaster yes dans votre fichier ~/ssh/config ou -M sur la ligne de commande.