Многопролетный туннель:
Я открываю туннель к удаленному серверу через сервер переходов.
ssh ${JUMP_HOST} -l ${JUMP_HOST_USER} -L ${PORT}:localhost:${PORT} \
ssh ${REMOTE_HOST} -l ${REMOTE_HOST_USER} -L ${PORT}:localhost:${PORT}
Теперь, когда я открываю соединение с localhost:port
он переходит к jump:port
который, в свою очередь, пересылает к remote:port
Запустите локальный туннель в фоновом режиме:
Проблема в том, что он открывает оболочку на remote
, тогда как я хочу, чтобы туннель работал в фоновом режиме.
Поэтому я добавляю опцию -f
в мой локальный туннель, чтобы запросить его запуск в фоновом режиме
ssh -f ${JUMP_HOST} -l ${JUMP_HOST_USER} -L ${PORT}:localhost:${PORT} \
ssh ${REMOTE_HOST} -l ${REMOTE_HOST_USER} -L ${PORT}:localhost:${PORT}
Это, однако, возвращает ошибку:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Предположительно, эта ошибка исходит из туннеля от jump
к remote
, и вызвана тем, что stdin
закрыт, когда мой локальный туннель демонизирован.
Скажите удаленному туннелю, что я не буду запускать команду:
Затем я попытался запустить jump-> remote
tunnel с -N
чтобы сказать, что я не собираюсь запускать удаленную команду.
ssh -f ${JUMP_HOST} -l ${JUMP_HOST_USER} -L ${PORT}:localhost:${PORT} \
ssh -N ${REMOTE_HOST} -l ${REMOTE_HOST_USER} -L ${PORT}:localhost:${PORT}
Это прекрасно работает - туннель работает в фоновом режиме, и я могу успешно подключиться к remote:port
через порт localhost:port
.
Проблема:
Проблема в том, что я хочу закрыть туннели.
Если я отправлю сигнал уничтожения в pid моего локального ssh-туннеля, он закроется, но ssh-туннель, работающий при jump
продолжать работать.
Кажется, что когда я демонизирую свой локальный туннель, туннель при jump
также демонизируется.
Вопрос:
Можно ли запустить мой локальный туннель в фоновом режиме, но когда я его убиваю, он отключает все туннели, которые он породил на всех удаленных серверах?