Ajout de transferts de port par programmation sur une session ControlMaster SSH

9

Je viens de découvrir la fonction 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 la redirection de port pour obtenir des sessions VNC chiffrées et authentifiées, j'ai instantanément reconnu que vous ne pouvez pas ajouter de redirection de port à un serveur distant auquel vous avez déjà une connexion établie. Ça craint.

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 transferts de port.

Ma question est maintenant: comment puis-je ajouter des transferts de port sur une session SSH existante qui utilise la fonctionnalité ControlMaster / ControlPath, sans avoir besoin d'avoir accès à une session de terminal à l'intérieur de cette session SSH. J'en ai besoin pour activer mon script qui démarre une connexion VNC tunnelée sécurisée pour que j'ajoute et supprime plus tard ses redirections de port.

(Je sais que je pourrais utiliser un multiplexeur de 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 serveur.)

aef
la source
1
Je serai interpellé pour voir si vous trouvez un moyen de le faire, mais je soupçonne que vous ne le ferez pas. Le contrôle par programme des propriétés d'une session SSH dont vous ne faites pas partie semble être un énorme problème de sécurité.
Caleb
1
Absurdité! Comment le contrôle par programme des propriétés d'une session SSH introduit-il un énorme problème de sécurité? La solution est vraiment assez simple: serverfault.com/a/340361/93109
aculich
La question se pose désormais uniquement sur l'ajout de redirection de ports afin de mieux correspondre à la réponse acceptée. J'ai posé une question sur la façon de les supprimer ensuite ici: serverfault.com/q/457295/50950
aef

Réponses:

9

C'est assez simple, en fait. Ajoutez simplement 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 sshpage de manuel présente l' -O ctl_cmdoption:

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

Bien entendu, cela suppose que vous avez activé ControlMaster yesvotre ~/ssh/configfichier ou -Mla ligne de commande.

aculich
la source
1
Pourriez-vous s'il vous plaît essayer de répondre à la question connexe ici: serverfault.com/q/457295/50950
aef