Предполагая, что вы используете OpenSSH из командной строки ....
SSH может открыть соединение, которое будет поддерживать туннель и остаются активными в течение как можно дольше:
ssh -fNT -Llocalport:remotehost:remoteport targetserver
Вы можете альтернативно, SSH запускает что-то на сервере, который работает некоторое время. Туннель будет открыт для того времени. Соединение SSH должно оставаться после завершения удаленной команды до тех пор, пока туннель все еще используется. Если вы будете использовать туннель только один раз, укажите короткий «сон», чтобы истечь туннель после использования.
ssh -f -Llocalport:remotehost:remoteport targetserver sleep 10
Если вы хотите, чтобы иметь возможность убить туннель из скрипта на локальной стороне, то я рекомендую вам фон это в вашей оболочке, а затем записать ИДП убить позже. Предполагая, что вы используете операционную систему, которая включает в себя Bourne оболочки ....
#/bin/sh
ssh -f -Llocalport:remotehost:remoteport targetserver sleep 300 &
sshpid=$!
# Do your stuff within 300 seconds
kill $sshpid
Если ваш SSH фонового режима с помощью оболочки не по своему вкусу, вы можете также использовать расширенные возможности SSH для управления процессом фонового. Как described here, функции SSH ControlMaster
и ControlPath
- это то, как вы делаете эту работу. Например, добавьте следующую строку в ваш ~/.ssh/config
:
host targetserver
ControlMaster auto
ControlPath ~/.ssh/cm_sockets/%[email protected]%h:%p
Теперь ваше первое подключение к targetserver
будет создан элемент управления, так что вы можете сделать что-то вроде этого:
$ ssh -fNT -Llocalport:remoteserver:remoteport targetserver
$ ssh -O check targetserver
Master running (pid=23450)
$ <do your stuff>
$ ssh -O exit targetserver
Exit request sent.
$ ssh -O check targetserver
Control socket connect(/home/sorin/.ssh/cm_socket/[email protected]:22): No such file or directory
Очевидно, что эти команды могут быть завернуты в ваш сценарий оболочки.
Что такое 'coproc'? Он не включен ни на один из моих серверов FreeBSD или OSX, и, похоже, он работает по-разному в Solaris. Для получения ответа на ваш запрос требуется дополнительная информация, если вы используете специальные команды поставщика. – ghoti
'coproc' - это bash builtin. Не знаю, в какую версию bash он впервые появился, извините. – dave4420
А, я вижу. Спасибо, я не знал об этом башизме. – ghoti