2

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

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

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

1 ответ1

4

Привет и добро пожаловать в 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 позже, если вам нужно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .