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