Adicionando encaminhamentos 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 não é possível adicionar o encaminhamento de porta a um servidor remoto ao qual você já possui uma conexão estabelecida. Isso é péssimo.

Às vezes, 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 posso 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 ativar meu script, que inicia uma conexão VNC encapsulada segura para eu adicionar e remover posteriormente seus encaminhamentos de porta.

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

aef
fonte
1
Ficarei intrigado ao ver se você encontra uma maneira de fazer isso, mas suspeito que não. Controlar programaticamente as propriedades de uma sessão SSH da qual você não faz parte parece um enorme problema de segurança.
Caleb
1
Absurdo! Como o controle programático das propriedades de uma sessão SSH apresenta um enorme problema de segurança? A solução é realmente bastante simples: serverfault.com/a/340361/93109
aculich
Agora, a pergunta está apenas perguntando sobre a adição de encaminhamento de porta, para que corresponda melhor à resposta aceita. Eu fiz uma pergunta sobre como removê-los depois aqui: serverfault.com/q/457295/50950
aef 12/12/12

Respostas:

9

Isso é bem simples, na verdade. Basta adicionar o ctl_cmd -O forwardao seu comando existente, assim:

ssh -M -L5555:localhost:22 remotehost

torna-se:

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

A sshpágina do manual discute a -O ctl_cmdopção:

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

Obviamente, isso pressupõe que você tenha ativado ControlMaster yesno seu ~/ssh/configarquivo ou -Mna linha de comando.

aculich
fonte
1
Você poderia tentar responder à pergunta relacionada aqui: serverfault.com/q/457295/50950
aef