Некоторое время назад я получил ответ говорит мне, как добавить переадресацию портов в запущенный процесс SSH ControlMaster. Это очень помогает, но мне все еще не хватает способа удалить такую переадресацию портов после того, как она мне больше не нужна.
Насколько я знаю, вы можете сделать это с помощью внутренней последовательности командных клавиш при нормальных подключениях, похоже, это отключено для клиентов ControlMaster. Даже если бы это было возможно, мне нужно было бы решение, которое я мог бы автоматизировать с помощью скриптов, что, конечно, не так просто.
Как это сделать? И легко ли это автоматизировать?
Так как мой предыдущий ответ отмечает, страница руководства по ssh объясняет -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
like и 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
from localhost слева, а вывод ssh, подключенного к remotehost, справа:
Эти команды доступны только с 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
.