В настоящее время я пишу скрипт 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
.