Назад | Перейти на главную страницу

Программное добавление переадресации портов в сеанс ControlMaster SSH

Я только что узнал о функции ControlMaster / ControlPath в OpenSSH, которая позволяет использовать одно соединение SSH для запуска нескольких терминалов.

Поскольку я часто использую SSH для использования перенаправления портов для получения зашифрованных и аутентифицированных сеансов VNC, я сразу понял, что вы не можете добавлять перенаправление портов на удаленный сервер, к которому у вас уже установлено соединение. Это отстой.

Иногда позже я обнаруживал, что это ограничение можно обойти, набрав ~ C в запущенном сеансе терминала SSH. Это открывает командную строку, которая позволяет вам добавлять или удалять переадресацию портов.

Мой вопрос: как добавить переадресацию портов в существующий сеанс SSH, который использует функцию ControlMaster / ControlPath, без необходимости иметь доступ к сеансу терминала внутри этого сеанса SSH. Мне это нужно, чтобы включить мой сценарий, который запускает безопасное туннелированное соединение VNC, чтобы я мог добавить, а затем удалить его переадресацию портов.

(Я знаю, что могу использовать терминальный мультиплексор, такой как GNU Screen или tmux, на самом деле я уже этим занимаюсь. Но мне нравится идея использовать только один сеанс SSH по ряду причин.)

На самом деле это довольно просто. Просто добавьте ctl_cmd -O forward к вашей существующей команде, таким образом:

ssh -M -L5555:localhost:22 remotehost

становится:

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

В ssh страница руководства обсуждает -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 в командной строке.