Запустить интерактивную оболочку из скрипта bash

Запустить интерактивную оболочку из скрипта bash

В настоящее время я пишу скрипт Bash, который создает туннель SSH. Когда это будет сделано, я хотел бы, чтобы скрипт открыл новую локальную (!) интерактивную оболочку, чтобы я мог работать в своей системе с открытым туннелем SSH.

После ввода текста exitлокальная оболочка должна закрыться, а исходный скрипт продолжить работу.

Мой текущий подход в основном выглядит следующим образом:

#!/usr/bin/env bash

set -e

ssh -N user@ip -L xxx:xxx &
SSH_CONNECTION=${!}

trap "kill ${SSH_CONNECTION}" ERR

sleep 3
bash -i

kill ${SSH_CONNECTION}

Пока что все работает - кроме запуска локальной оболочки. Я действительно получаю оболочку, и я даже могу в ней печатать, но ничего не происходит, когда я нажимаю <Return>.

Есть идеи, что я делаю не так?

решение1

Вам нужно использовать -f, чтобы соединение перешло в фоновый режим после установки. Тогда вам не понадобится &:

ssh -Nf  -L xxx:xxx user@ip

и обработка должна попасть в ваш bash.

Связанный контент