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


9

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

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

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

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

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


1
Мне будет интересно узнать, найдете ли вы способ сделать это, но я подозреваю, что нет. Программный контроль свойств сеанса SSH, частью которого вы на самом деле не являетесь, кажется огромной проблемой безопасности.
Калеб

1
Бред какой то! Как программный контроль свойств сеанса SSH создает огромную проблему безопасности? Решение действительно очень простое: serverfault.com/a/340361/93109
aculich

Вопрос теперь только о добавлении переадресации портов, поэтому он лучше соответствует принятому ответу. Я задал вопрос о том, как их потом удалить, здесь: serverfault.com/q/457295/50950
aef 12.12.12

Ответы:


9

Это довольно просто, на самом деле. Просто добавьте 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в командной строке.


1
Не могли бы вы попытаться ответить на соответствующий вопрос здесь: serverfault.com/q/457295/50950
aef 12.12.12
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.