Удаление переадресации портов программно в сеансе 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 подключен к удаленному хосту с правой стороны:
Эти команды доступны только с 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
,