Как настроить общий доступ к удаленному рабочему столу через SSH?

Есть ли способ просматривать (и управлять) удаленный рабочий стол через SSH? У меня не будет физического доступа к удаленной хост-машине.

Способ 1 :

Этого можно достичь с помощью vino vnc server и remmina (оба поставляются по умолчанию с ubuntu; если нет, установите его, запустив sudo apt-get install remmina). Затем выполните следующие команды с локального компьютера в командной строке терминала:

  1. ssh -Y gman@remote. Используйте доверенную переадресацию X11, иначе она не будет работать

  2. vino-preferences. Это откроет винные предпочтения.

    vino-preference

  3. Также Нажмите configure network automatically to accept connection. Но не вводите никакого пароля, его кодировка base64. Затем нажмите кнопку Закрыть. Затем бегите:

    sudo -sexport DISPLAY=:0.0xhost +/usr/lib/vino/vino-server & 

    Это запустит сервер vino.

  4. Выход из системы с сервера:

    xhost -Press CTRL+C twiceexitexit
  5. Затем откройте реммина. Выберите vnc в соответствии с протоколом.

    Под basic вкладка введите адрес сервера в server поле.

    На вкладке ssh нажмите enable ssh tunnel. Под ssh authentication, это может быть password или public key:

    remmina-preference

    Нажмите кнопку Сохранить. А затем дважды щелкните имя подключения (домашний рабочий стол, как показано на рисунке), чтобы начать просмотр удаленного рабочего стола.


Способ 2:

x11vnc это простой VNC-сервер, и вам не придется возиться с настройками Gnome или 500 брандмауэрами, просто установите x11vnc на всех ваших компьютерах (с помощью puppet или чего-то еще, что вы используете для массового контроля).

Затем с вашего локального компьютера запустите:

ssh user@host -L 5900:localhost:5900 "x11vnc -display :0 -noxdamage"

Очевидно, меняя местами user@host для имени пользователя и имени хоста/IP удаленного компьютера.

А затем используйте VNC-клиент по вашему выбору для подключения к localhost:5900. Команда SSH запускает сервер vnc на удаленном компьютере, а затем туннелирует обратно этот порт по SSH. Вам не нужно открывать какие-либо порты (если вы уже можете использовать SSH).

Если ваши компьютеры имеют странные настройки отображения, возможно, вам лучше отказаться от -display :0 сегмент в команде SSH. x11vnc затем автоматически попытается найти нужный дисплей.


Источник: askubuntu

Обзор решения

Предполагая, что вы уже настроили OpenSSH Server на вашем хост-компьютере сначала необходимо включить управление рабочим столом на вашем хост-компьютере. Если вы можете сначала включить управление рабочим столом на своем хост-компьютере локально, перейдите к разделу 1a. Если вам необходимо сначала включить удаленное управление рабочим столом на вашем хост-компьютере, перейдите к разделу 1b.

Затем создайте профиль клиента удаленного рабочего стола на своем клиентском компьютере, чтобы подключиться к хост-машине через SSH-туннель и в конечном итоге просматривать рабочий стол хост-машины и управлять им через SSH-туннель.

1a. Локально Включите удаленное управление хост-машиной

Выполните следующие действия на главном компьютере:

vino-preferences
  • vino-preferences также в тире под Desktop Sharing

enter image description here

  1. Галочка Allow other users to view your desktop
  2. Галочка Allow other users to control your desktop
  3. Галочка Require the user to enter this password
  4. Введите кодовую фразу, которую трудно угадать
  5. Закрывать

1b. Удаленно Включите дистанционное управление хост-машиной

Выполните следующие действия на клиентском компьютере, заменив 123.123.12.3 с IP-адресом вашего хост-компьютера:

ssh -Y 123.123.12.3
  • -Y, Включает доверенную переадресацию X11. Доверенные пересылки X11 не подпадают под действие элементов управления расширением безопасности X11.
vino-preferences
  • vino-preferences также в тире под Desktop Sharing

enter image description here

  1. Галочка Allow other users to view your desktop
  2. Галочка Allow other users to control your desktop
  3. Галочка Require the user to enter this password
  4. Введите кодовую фразу, которую трудно угадать
  5. Закрывать

Создайте профиль клиента удаленного рабочего стола на вашем клиентском компьютере

Выполните следующие действия на клиентском компьютере:

remmina
  • реммина также в тире под Remmina Remote Desktop Client

Ctrl+N или Подключение > Новое

enter image description here

  1. Введите свой IP-адрес [123.123.12.3], где указано Server
  2. Переключитесь на SSH вкладка

enter image description here

  1. Галочка Enable SSH Tunnel
  2. Направьте свой настольный клиент на ваш нестандартный SSH-порт
  3. Установите свой SSH Authentication <username> и режим
  4. Подключить

Просмотр и управление Хост-машиной

На клиентском компьютере, когда запрашивается <username>пароль пользователя, введите его, чтобы создать SSH-туннель. Когда вас попросят ввести пароль VNC, введите кодовую фразу, которую вы ранее ввели на хост-компьютере.

В случае успешного выполнения этого шага теперь вы должны просматривать рабочий стол хост-машины и управлять им со своего клиентского компьютера через SSH-туннель.

Я смог установить новую установку Ubuntu 16.04 с удаленного ssh-соединения с помощью следующего скрипта:

#!/bin/bashexport DISPLAY=:0read -e -p "Пароль VNC: " -i "ubuntu" passwordconf запись /org/gnome/рабочий стол/удаленный доступ/включен truedconf запись /org/gnome/рабочий стол/удаленный доступ/запрос включен falsedconf запись /org/gnome/рабочий стол/удаленный доступ/методы аутентификации "['vnc']"dconf write /org/gnome/desktop/remote-access/require-encryption falsedconf write /org/gnome/desktop/remote-access/vnc-password \"\'$(echo -n $password | base64)\'\"dconf дамп /org/gnome/рабочий стол/удаленный доступ/служба sudo lightdm перезапуск

Кавычки важны для любых настроек строки (одиночные тики внутри кавычек). Чтобы dconf мог записывать, ему необходим доступ к XWindows, поэтому необходима часть ОТОБРАЖЕНИЯ экспорта. Я думаю, что вам все равно нужно войти в систему на рабочем столе на самом компьютере Ubuntu, чтобы подключиться к VNC после этого.Команда dump предназначена только для подтверждения того, что все настройки были сохранены, на самом деле вам это не нужно.

При желании вы можете сделать это, если хотите, чтобы дисплей постоянно отображался:

dconf write /org/gnome/desktop/screensaver/с включенной блокировкой falsedconf write /org/gnome/desktop/screensaver/ubuntu-lock-on-suspend falsedconf write /org/gnome/desktop/session/idle-задержка "uint32 0"
  1. Вы можете использовать ssh для запуска сеанса vnc
  2. Воспользуйся Xnest с помощью X11 forwording можно удаленно запустить сеанс и переслать его на ваш текущий компьютер. (Я делаю это время от времени со своим pi) справочная страница

Я использую Xnest вот так:

  • Xnest :1 -ac &
  • затем DISPLAY=:1 . /etc/X11/Xsession

Как запустить Vino server удаленно без переадресации X (только для командной строки)

Войдите на удаленный компьютер как пользователь, который будет использовать общий доступ к своему рабочему столу, и перенаправьте порт 5900 на тот же порт на localhost. С помощью PuTTY перенаправление устанавливается в Connection/SSH/Tunnels. С помощью командной строки используйте:

 ssh -L 5900:localhost:5900 user@remote-computer

Устанавливать vino-server если он еще не установлен. Например:

sudo apt install vino

Включить общий доступ к рабочему столу (соответствие отображаемому номеру в 1-й и 2-й строках):

echo $DISPLAYexport DISPLAY=:0dbus-launch --exit-with-session gsettings set org.gnome.Vino enabled truedbus-launch --exit-with-session gsettings set org.gnome.Vino prompt-enabled falsedbus-launch --exit-with-session gsettings set org.gnome.Vino require-encryption false/usr/lib/vino/vino-server

Запустите средство просмотра VNC и подключитесь к localhost для адреса сервера VNC.

На серверном компьютере.

  • Откройте "Настройки вина" в терминале или "Общий доступ к рабочему столу" с помощью dash.

vino-preferences

На клиентском компьютере (откуда вы хотите управлять пользовательским интерфейсом сервера).

  • Сохраните настройки, как показано на изображениях ниже (с изменениями в месте имени пользователя и IP-адреса).

*Basic* tab*Advanced* tab*SSH* tab

Подводные камни.

  • Когда я попытался установить настройки vino на сервере с удаленного компьютера с помощью SSH, они были изменены, но соединение не произошло. Я должен был сделать это непосредственно на серверной машине (не удаленно). Я не знаю причины такого поведения.

основываясь на ответе @Khurshid Alam, я представляю следующий фрагмент:

ssh $TARGETHOST -L 5900:localhost:5900 "x11vnc -localhost -display :0 -noxdamage" &; sleep 10 && vinagre localhost

  • Это одна команда, которая не требует никакого взаимодействия

  • Он создает SSH-туннель с переадресацией портов, запускает x11vnc достаточно безопасным способом и запускает и подключает средство просмотра VNC

  • Для этого требуется x11vnc на целевом хосте, но никакой дополнительной настройки

  • Для этого требуется vinagre на вашем компьютере, но вы можете тривиально изменить его для другого средства просмотра VNC

вино неспецифично для SSH: vino - Enable remote VNC from the commandline? - Ask Ubuntu