Я хотел бы написать скрипт, который в качестве аргумента получает IP-адрес локального компьютера (в сети сервера ssh) и перенаправляет порт 5900 на компьютере клиента на этот IP: 5900 в сети сервера.
Сразу после установления соединения я бы хотел запустить vnc viewer и подключиться к этому удаленному хосту, используя перенаправленный порт.
Сценарий, который я придумал, выглядит следующим образом:
#/bin/bash
ssh -L 5900:${1}:5900 user@server-ip
vncviewer 127.0.0.1:5900
И его следует использовать так:
Допустим, в сети сервера есть компьютер с ip 10.0.0.10 Таким образом, выполнение команды:
vnc-ssh-script 10.0.0.10
на моем домашнем (клиентском) компьютере должно открыть средство просмотра vnc и позволить мне управлять компьютером 10.0.0.10 локальной сети (на котором работает сервер vnc).
Единственная проблема заключается в том, что после выполнения первой строки сценария (ssh -L 5900: $ {1}: 5900 user @ server-ip) соединение устанавливается и следующая команда (vncviewer 127.0.0.1:5900) ) не будет выполняться, пока сессия ssh не будет закрыта ...
У меня вопрос: как мне установить задачу, которую я хочу?
Я уже пытался добавить '& amp;' после команды ssh, но затем, когда я выполняю сценарий, я получаю сообщение:
«Psedo-терминал не будет выделен, потому что stdin не является терминалом».
и кажется, что ssh автоматически закрывается (и даже если бы он работал, у меня было бы указание на то, что он преуспел перед выполнением команды vncviewer).
Вы должны вставить SSH-соединение в фоновом режиме. Амперсанд в конце команды делает это, и я также передаю флаг N, чтобы остановить работу оболочки на удаленном конце (экономит кучу ресурсов и останавливает SSH, не позволяющий подключить консоль):
#/bin/bash
ssh -NL 5900:${1}:5900 user@${1} &
sleep 1
vncviewer 127.0.0.1:5900
Раньше я делал что-то подобное, но по требованию запускал x11vnc на удаленном компьютере. Это имело дополнительный побочный эффект: он работал только во время работы x11vnc ... И он завершается после первого отключения (желательно!):
#/bin/bash
ssh -L 5900:${1}:5900 user@${1} "x11vnc" &
vncviewer 127.0.0.1:5900