How to set up remote desktop sharing through SSH?
Is there a way to view (and control) a remote desktop through SSH? I will not have physical access to the remote host machine.
Solution 1:
Method 1 :
This can be achieved with vino vnc server & remmina (both come default with ubuntu; if not install it by running sudo apt-get install remmina
). Then Run Following commands from local computer in terminal prompt:
ssh -Y gman@remote
. Use trusted X11 forwarding, otherwise it wont work-
vino-preferences
. It will open vino-preferences. -
Also Click
configure network automatically to accept connection
. But don't enter any password, its base64 encoded. Then click close. Then run:sudo -s export DISPLAY=:0.0 xhost + /usr/lib/vino/vino-server &
It will start the vino server.
-
Logout from server:
xhost - Press CTRL+C twice exit exit
-
Then open remmina. Choose
vnc
under protocol.Under
basic
tab put server address inserver
field.On ssh tab click
enable ssh tunnel
. Underssh authentication
, it could bepassword
orpublic key
:Click save. And then double click connection-name(home-desktop as shown in the picture) to start browsing remote desktop.
Method 2:
x11vnc
is a simple VNC server and you won't have to mess around with Gnome settings or 500 firewalls, just install x11vnc
on all your computers (with puppet or whatever you're using for mass-control).
Then from your local computer run:
ssh user@host -L 5900:localhost:5900 "x11vnc -display :0 -noxdamage"
Obviously swapping user@host
for the username and hostname/IP of the remote computer.
And then use a VNC client of your choice to connect to localhost:5900
. The SSH command starts a vnc server on the remote computer and then tunnels back that port over SSH. You don't have to open up any ports (as long as you can already SSH).
If your computers have funny display settings, you might do better to leave off the -display :0
segment in the SSH command. x11vnc
will then automatically try to find the right display.
Source: askubuntu
Solution 2:
Overview of Solution
Assuming you have already setup an OpenSSH Server
on your host machine, you must first enable desktop control on your host machine. If you can first enable desktop control on your host machine locally, head to 1a. If you must first enable desktop control on your host machine remotely, head to 1b.
Next create a Remote Desktop Client profile on your client machine in order to connect to the host machine through an SSH tunnel and ultimately view and control the host machine's desktop through an SSH tunnel.
1a. Locally Enable Remote Control of Host Machine
Do the following on the host machine:
vino-preferences
-
vino-preferences
also in Dash underDesktop Sharing
- Tick
Allow other users to view your desktop
- Tick
Allow other users to control your desktop
- Tick
Require the user to enter this password
- Enter a difficult to guess passphrase
- Close
1b. Remotely Enable Remote Control of Host Machine
Do the following on the client machine, replacing 123.123.12.3
with your host machine's IP address:
ssh -Y 123.123.12.3
- -Y, Enables trusted X11 forwarding. Trusted X11 forwardings are not subjected to the X11 SECURITY extension controls.
vino-preferences
-
vino-preferences
also in Dash underDesktop Sharing
- Tick
Allow other users to view your desktop
- Tick
Allow other users to control your desktop
- Tick
Require the user to enter this password
- Enter a difficult to guess passphrase
- Close
Create Remote Desktop Client profile on your Client Machine
Do the following on the client machine:
remmina
- remmina also in Dash under
Remmina Remote Desktop Client
Ctrl+N or Connection > New
- Fill in your IP address [123.123.12.3] where it says
Server
- Switch to the
SSH
tab
- Tick
Enable SSH Tunnel
- Point your Desktop Client to your non-standard SSH port
- Set your
SSH Authentication
<username>
and mode - Connect
View and Control Host Machine
On the client machine, when asked for <username>
's password, enter it to create the SSH tunnel. When asked for the VNC password, enter the passphrase you previously entered into the host machine.
If successful at this step, you should now be viewing and controlling the host machine's desktop from your client machine through an SSH tunnel.
Solution 3:
I was able to set a fresh Ubuntu 16.04 install from a remote ssh connection with the following script:
#!/bin/bash export DISPLAY=:0 read -e -p "VNC Password: " -i "ubuntu" password dconf write /org/gnome/desktop/remote-access/enabled true dconf write /org/gnome/desktop/remote-access/prompt-enabled false dconf write /org/gnome/desktop/remote-access/authentication-methods "['vnc']" dconf write /org/gnome/desktop/remote-access/require-encryption false dconf write /org/gnome/desktop/remote-access/vnc-password \"\'$(echo -n $password | base64)\'\" dconf dump /org/gnome/desktop/remote-access/ sudo service lightdm restart
The quoting is important for any of the string settings (single ticks inside quotes). For dconf to be able to write it needs access to XWindows, so that's why the export DISPLAY part is needed. I think you still need to be logged in to the desktop on the actual Ubuntu machine to connect with VNC after this. The dump command is just there to confirm all the settings took hold, you don't really need that.
Optionally you may want to do this if you want to keep the display up all the time:
dconf write /org/gnome/desktop/screensaver/lock-enabled false dconf write /org/gnome/desktop/screensaver/ubuntu-lock-on-suspend false dconf write /org/gnome/desktop/session/idle-delay "uint32 0"
Solution 4:
- You could use ssh to start a vnc session
- Use
Xnest
with X11 forwording to remotely start a session and forward it to your current computer. (I do this from time to time with my pi) man page
I use Xnest
like so:
Xnest :1 -ac &
- then
DISPLAY=:1 . /etc/X11/Xsession
Solution 5:
How to start Vino server remotely without forwarding X (command line-only)
Log on the remote computer as the user who will share their desktop and forward port 5900 to the same port on localhost. With PuTTY, the redirection is set in Connection/SSH/Tunnels. With a command line, use:
ssh -L 5900:localhost:5900 user@remote-computer
Install vino-server
if it is not already installed. For example:
sudo apt install vino
Enable desktop sharing (matching the display number on 1st and 2nd lines):
echo $DISPLAY
export DISPLAY=:0
dbus-launch --exit-with-session gsettings set org.gnome.Vino enabled true
dbus-launch --exit-with-session gsettings set org.gnome.Vino prompt-enabled false
dbus-launch --exit-with-session gsettings set org.gnome.Vino require-encryption false
/usr/lib/vino/vino-server
Start a VNC viewer and connect to localhost
for the VNC server address.