Выполнение команды локально после туннелирования ssh

У меня есть файл скрипта ./run_app.sh который содержит следующее:

ssh -L 8888:localhost:8888 ubuntu@address
./run_website.sh   # it should be executed locally

но он пытается запустить вторую строку на удаленной машине. На самом деле, я хочу запустить его на моем компьютере. Любая идея?

1 ответ

Решение

Здравствуйте и добро пожаловать в Super User.

После ssh -L 8888:localhost:8888 ubuntu@address Ваш скрипт находит себя на удаленном сервере.

Вы можете передать флаги -fN в ssh (-f для вилки в фоновом режиме и -N не запускается без команды).

Затем, после установки туннеля, ваш сценарий возобновляет выполнение на следующей строке на вашем компьютере.

Недостатком является то, что ssh соединение останется в фоновом режиме даже после того, как ваш скрипт будет завершен.

Обходной путь отбрасывает -N пометить и выполнить sleep 10 на удаленном сервере:

ssh -f -L 8888:localhost:8888 ubuntu@address sleep 10

Таким образом, если туннель не используется, либо когда run_website.sh завершается или через 10 секунд, если скрипт не будет использовать туннель (т.е. по какой-то причине не работает), он автоматически отключится.

Это очевидно предполагает, что run_website.sh использует туннель.

Если вас не интересует автоматическое завершение туннеля, тогда просто используйте -fN:

ssh -fN -L 8888:localhost:8888 ubuntu@address

Вы можете убить ssh Процесс позже, если вам нужно.

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