Adicionando reenvios de porta programaticamente em uma sessão SSH do ControlMaster

9

Acabei de descobrir sobre o recurso ControlMaster / ControlPath do OpenSSH, que permite usar uma única conexão SSH para executar vários terminais.

Como geralmente uso o SSH para usar o encaminhamento de porta para obter sessões VNC criptografadas e autenticadas, reconheci instantaneamente que você não pode adicionar encaminhamentos de porta a um servidor remoto ao qual você já tenha uma conexão estabelecida. Isso é uma merda.

Às vezes, mais tarde, descobri que você pode contornar essa limitação digitando ~ C em uma sessão de terminal SSH em execução. Isso abre uma linha de comando que permite adicionar ou remover encaminhamentos de porta.

Minha pergunta agora é: Como adicionar encaminhamentos de porta em uma sessão SSH existente que esteja usando o recurso ControlMaster / ControlPath, sem a necessidade de ter acesso a uma sessão de terminal dentro dessa sessão SSH. Eu preciso disso para habilitar meu script que inicia uma conexão VNC encapsulada segura para eu adicionar e depois remover seus redirecionamentos de porta.

(Eu sei que eu poderia usar um multiplexador de terminal como o GNU Screen ou o tmux, na verdade eu já estou fazendo isso. Mas eu gosto da idéia de usar apenas uma sessão SSH por razões de servidor).

    
por aef 19.02.2011 / 20:11

1 resposta

9

Isso é bem simples, na verdade. Simplesmente adicione o ctl_cmd -O forward ao seu comando existente, assim:

ssh -M -L5555:localhost:22 remotehost

torna-se:

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

A página ssh man discute a opção -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).

Isso, é claro, pressupõe que você tenha ativado ControlMaster yes no seu arquivo ~/ssh/config ou -M na linha de comando.

    
por 13.12.2011 / 07:11