Removendo reencaminhamentos de porta programaticamente em uma sessão SSH do ControlMaster

4

Há algum tempo recebi uma resposta dizendo-me como adicionar um encaminhamento de porta em um processo SSH ControlMaster em execução . Saber que ajuda muito, mas ainda estou perdendo uma maneira de remover esse encaminhamento de porta depois que eu não preciso mais disso.

Tanto quanto eu sei, você pode fazer isso através da sequência de teclas de comando interno em conexões normais, isso parece estar desabilitado para os clientes do ControlMaster. Mesmo que isso fosse possível, precisaria de uma solução que eu possa automatizar com scripts, o que certamente não é tão fácil assim.

Existe uma maneira de fazer isso? E é facilmente automatizável?

    
por aef 12.12.2012 / 04:13

1 resposta

4

Como minha resposta anterior , o página man do ssh explica o -O ctl_cmd em detalhes, em que ctl_cmd é um dos check , forward , cancel ou exit .

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

Você pode usar ctl_cmd para realizar a automação desejada para seus scripts. Você precisará primeiro criar um ControlMaster socket com -S like e ssh para o remotehost assim:

ssh -v -M -S/tmp/controlmaster-remotehost remotehost

e, em seguida, a partir da sua máquina local, você pode usar forward e cancel portas como desejar. Você pode encaminhar várias portas com um comando:

ssh -O forward -S/tmp/controlmaster-remotehost -L5555:localhost:22 -L3333:localhost:22 remotehost

e / ou manipulá-los um de cada vez:

ssh -O cancel  -S/tmp/controlmaster-remotehost -L5555:localhost:22 remotehost
ssh -O cancel  -S/tmp/controlmaster-remotehost -L3333:localhost:22 remotehost

Eu criei uma essência com uma sessão lado a lado mostrando o ssh -O ctl_cmd em ação; com a porta forward / cancel do localhost no lado esquerdo, e a saída do ssh conectada ao remotehost no lado direito:

link

Estes comandos só estão disponíveis a partir de OpenSSH 6.0 :

 * ssh(1): support for cancelling local and remote port forwards via the
   multiplex socket. Use ssh -O cancel -L xx:xx:xx -R yy:yy:yy user@host"
   to request the cancellation of the specified forwardings
 * support cancellation of local/dynamic forwardings from ~C commandline

Se você tiver uma versão anterior, precisará atualizar. Se você está no Mac OS X, você pode instalar macports e, em seguida, atualize usando: sudo port install openssh , que irá instalá-lo em /opt/local/bin .

    
por 12.12.2012 / 07:41