1

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

1

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

ssh -Nf  -L xxx:xxx user@ip

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

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