Начните с настройки собственного ключа SSH для подключения к «myhost». Затем отредактируйте файл .ssh / authorized_keys на «myhost», чтобы родительский PID оболочки записывался в файл:
command="echo $PPID > tunnel.pid; bash" ssh-rsa AAA...
Вы можете настроить некоторые другие параметры безопасности и / или вы можете написать собственный скрипт, чтобы просто написать PID и зависнуть. Принцип одинаков в любом случае.
Когда у вас есть PID процесса, который поддерживает сессию SSH, это просто вопрос сценариев ...
kill `cat tunnel.pid`
... завершить процесс, закрыв тем самым сессию SSH.
Обратите внимание, что вы можете использовать -i
флаг ssh
команды, чтобы указать закрытый ключ для подключения.
Редактирование: уничтожение процесса оболочки не приведет к закрытию туннеля, если есть активные соединения, поэтому мы уничтожаем родительский процесс SSH.
Редактирование: Хотя мое первое желание при использовании любого автоматического SSH-соединения - использовать SSH-ключи, тот же процесс можно эмулировать с помощью:
ssh -R 8888:localhost:80 myuser@myhost 'echo $PPID > tunnel.pid; for ((;;)); do sleep 1; done'
Вы также можете заменить скрипт, который проверяет некоторые другие критерии, чтобы решить, когда прекратить сам. Это, вероятно, более чистый способ справиться с этим.