У меня есть удаленный хост за бастионом, на который мне нужно настроить переадресацию портов, я пришел к следующему:

bastion=xyz.com
user=$( whoami )

function doSSH () {

    ssh $user@$bastion -t -A \
        -L 5900:127.0.0.1:5900 \
        ssh $user@$1 -t -A \
            -L 5900:127.0.0.1:5900 \
            '/opt/enableVNC && while [ 1 ]; do echo "Keeping forwards alive..." && sleep 60; done'
}

Проблема, с которой я сталкиваюсь, заключается в том, что после SSHing к удаленному узлу, я должен запустить скрипт, который включил VNC-сервер на узле, к сожалению, этот скрипт вскоре возвращает 0 когда сервер запущен и работает. Сценарий, который я вызываю, не является блокирующим сценарием, и сессия ssh заканчивается, хотя я установил порт для переадресации.

$ doSSH node1
user@xyz.com's password:
user@node1's password:
  VNC is now Enabled
  Listening on 127.0.0.1:5900
Connection to node1 closed.
Keeping forwards alive...
Keeping forwards alive...

Кажется, что соединение со вторым хостом разрывается сразу после возвращения первой части команды, и я не могу оставить соединение открытым для второго хоста.

Как я могу сохранить мой порт установленным после выполнения вызова, который немедленно возвращается?

2 ответа2

0

Я предполагаю, что вы использовали кавычки при запуске команды (в противном случае цикл while выполняется локально). Вы можете создать скрипт на удаленном хосте? Если это так, вы можете создать скрипт

#!/usr/bin/env bash
/opt/enableVNC && while [ 1 ]; do sleep 1; done

И запустите скрипт в вашей сессии ssh .

0

Как насчет этого уродливого куска кода:

bastion=xyz.com
user=$( whoami )

function doSSH () {

    ssh $user@$bastion -t -A \
        -L 5900:127.0.0.1:5900 \
        'bash -c "ssh '$user'@'$1' -t -A \
            -L 5900:127.0.0.1:5900 \
            bash -c \"/opt/enableVNC  && while [ 1 ]; do echo Keeping forwards alive... && sleep 60; done\""'
}

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