Добавление переадресации портов программно в сеансе ControlMaster SSH
Я только что узнал о функции ControlMaster/ControlPath в OpenSSH, которая позволяет использовать одно SSH-соединение для запуска нескольких терминалов.
Поскольку я часто использую SSH для использования переадресации портов для получения зашифрованных и аутентифицированных сеансов VNC, я сразу понял, что вы не можете добавить переадресацию портов на удаленный сервер, к которому у вас уже установлено соединение. Это отстой.
Иногда позже я узнал, что вы можете обойти это ограничение, набрав ~C во время сеанса терминала SSH. Это открывает командную строку, которая позволяет вам добавлять или удалять переадресацию портов.
Теперь у меня вопрос: как я могу добавить переадресацию портов в существующий сеанс SSH, использующий функцию ControlMaster/ControlPath, без необходимости иметь доступ к терминальному сеансу внутри этого сеанса SSH. Мне нужно это, чтобы включить мой сценарий, который запускает защищенное туннельное соединение VNC, чтобы я мог добавить, а затем удалить его переадресацию портов.
(Я знаю, что мог бы использовать терминальный мультиплексор, такой как GNU Screen или tmux, на самом деле я уже делаю это. Но мне нравится идея использовать только один сеанс SSH по нескольким причинам.)
1 ответ
Это довольно просто, на самом деле. Просто добавьте ctl_cmd -O forward
к вашей существующей команде, таким образом:
ssh -M -L5555:localhost:22 remotehost
будет выглядеть так:
ssh -O forward -M -L5555:localhost:22 remotehost
ssh
Страница man обсуждает -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).
Это, конечно, предполагает, что вы либо включены ControlMaster yes
в вашем ~/ssh/config
файл или -M
в командной строке.