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

Некоторое время назад я получил ответ, в котором говорилось, как добавить переадресацию портов в работающем процессе SSH ControlMaster. Знать, что это очень помогает, но мне все еще не хватает способа удалить переадресацию портов после того, как мне это больше не нужно.

Насколько я знаю, вы можете сделать это с помощью внутренней последовательности командных клавиш на обычных соединениях, это кажется отключенным для клиентов ControlMaster. Даже если бы это было возможно, мне бы понадобилось решение, которое я могу автоматизировать с помощью сценариев, что, конечно, не так просто.

Есть ли способ сделать это? И легко ли это автоматизировать?

1 ответ

Решение

Как отмечается в моем предыдущем ответе, на странице ssh man объясняется -O ctl_cmd подробно, где ctl_cmd один из check, forward, cancel, или же exit,

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

Вы можете использовать ctl_cmd чтобы выполнить автоматизацию, которую вы хотите для ваших сценариев. Вам нужно будет сначала создать ControlMaster розетка с -S как и SSH для удаленного хоста, как это:

ssh -v -M -S/tmp/controlmaster-remotehost remotehost

а затем с вашей локальной машины вы можете forward а также cancel порты как угодно. Вы можете переадресовать несколько портов одной командой:

ssh -O forward -S/tmp/controlmaster-remotehost -L5555:localhost:22 -L3333:localhost:22 remotehost

и / или обрабатывать их по одному:

ssh -O cancel  -S/tmp/controlmaster-remotehost -L5555:localhost:22 remotehost
ssh -O cancel  -S/tmp/controlmaster-remotehost -L3333:localhost:22 remotehost

Я создал суть с параллельной сессией, показывающей ssh -O ctl_cmd В бою; с портом forward / cancel с локального хоста с левой стороны, а вывод ssh подключен к удаленному хосту с правой стороны:

https://gist.github.com/raw/4265549/999d90b8f85190a41eed00e4d60d5d22da6c67b9/ssh-controlmaster-side-by-side.log

Эти команды доступны только с OpenSSH 6.0:

 * ssh(1): support for cancelling local and remote port forwards via the
   multiplex socket. Use ssh -O cancel -L xx:xx:xx -R yy:yy:yy user@host"
   to request the cancellation of the specified forwardings
 * support cancellation of local/dynamic forwardings from ~C commandline

Если у вас есть более ранняя версия, вам нужно обновить. Если вы используете Mac OS X, вы можете установить macports, а затем выполнить обновление, используя: sudo port install openssh который установит его в /opt/local/bin,

Другие вопросы по тегам