远程登陆centos/ubuntu桌面

ubuntu可参考

https://help.ubuntu.com/community/VNC/Servers#Start\_TigerVNC\_vncserver\_at\_boot

查看是否安装桌面

sudo yum grouplist

若没有以上两项,安装
sudo yum groupinstall -y "GNOME Desktop" "Graphical Administration Tools"

安装vnc-server

yum install tigervnc-server -y

ubuntu14.04:
wget https://bintray.com/artifact/download/tigervnc/stable/ubuntu-14.04LTS/amd64/tigervncserver_1.6.0-3ubuntu1_amd64.deb
sudo dpkg -i tigervncserver_1.6.0-3ubuntu1_amd64.deb
如果发现依赖错误:sudo apt-get install -f

vnc运行机制

Linux下的VNC可以同时启动多个vncserver,各个vncserver之间用显示编号(display number)来区分,每个vncserver服务监听3个端口,它们分别是:
1、5800+显示编号: VNC的httpd监听端口,如果VNC客户端为IE,Firefox等非vncviewer时必须开放。
2、5900+显示编号: VNC服务端与客户端通信的真正端口,必须无条件开放。
3、6000+显示编号: X监听端口,可选。

显示编号、开放的端口分别由/etc/sysconfig/vncservers(ubuntu 14.04为 /etc/default/vncservers)文件中的VNCSERVERS和VNCSERVERARGS控制。
VNCSERVERS的设置方式为:
VNCSERVERS="显示编号1:用户名1 …"
如:VNCSERVERS="1:root 2:aiezu"
VNCSERVERARGS的设置方式为:
VNCSERVERARGS[显示编号1]="参数一 参数值一 参数二 参数值二 ……"
如:VNCSERVERARGS[2]="-geometry 800x600 -nohttpd"

VNCSERVERARGS的详细参数有:
-geometry 桌面分辨率,默认1024x768;
-nohttpd 不监听HTTP端口(58xx端口);
-nolisten tcp 不监听X端口(60xx端口);
-localhost 只允许从本机访问;
-AlwaysShared 默认只同时允许一个vncviewer连接,此参数允许同时连多个vncviewer;
-SecurityTypes None 登录不需要密码认证VncAuth默认值,要密码认证。

配置vnc-server:centos7方式1

(可省略)
假设登录用户为vnc,复制一份通用的VNC服务文件来为用户vnc创建一个VNC服务配置
sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
sudo vi /etc/systemd/system/vncserver@:1.service

打开文件后找到以下内容,替换为用户vnc。
ExecStart=/sbin/runuser -l <USER> -c "/usr/bin/vncserver %i"
PIDFile=/home/<USER>/.vnc/%H%i.pid

重新加载服务来使新的VNC配置生效
sudo systemctl daemon-reload

配置vnc-server:方式2

(可省略)
sudo vi /etc/sysconfig/vncserver
ubuntu 14.04:sudo vi /etc/default/vncservers
添加以下内容:

1
2
VNCSERVERS="1:vnc"
VNCSERVERARGS[1]="-geometry 1600:900 -nolisten tcp"

重新加载服务来使新的VNC配置生效
sudo systemctl daemon-reload
ubuntu 14.04:sudo service vncserver restart

开机启动

在启动时自动启动VNC服务
sudo systemctl enable vncserver@:1.service

ubuntu14.04: enable the service at boot with:
sudo update-rc.d vncserver defaults

设置VNC用户密码

切换到vnc用户,并运行vncpasswd命令,输入远程连接密码

运行vncserver命令,显示的序号是在5900基础上加上虚拟机中的VNC序号。

运行上面命令后,会在用户根目录($HOME)下的”.vnc”文件夹下生成一系列文件。其中passwd为vnc用户密码文件,由vncpasswd生成。其他的都由vnc初次启动时生成,xstartup为VNC客户端连接时启动的脚本。

重新加载服务来使新的VNC配置生效
sudo systemctl daemon-reload
ubuntu 14.04:sudo service vncserver restart

开启VNC端口

开放的端口为5900+VNC序号
sudo iptables -I INPUT -p tcp --dport 5901 -j ACCEPT

查看vnc在服务器上的端口号

netstat -lp|grep -i vnc

客户端访问

下载vnc viewer,server框中输入ip:1(1代表上面配置的远程用户代号,配置文件中可以配置多个远程用户)或者ip:port,输入VNC密码,连接到远程桌面。

ubuntu没有显示菜单栏

修改~/.vnc/xstartup,将其内容替换为以下内容,确保软件都安装过。

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &

gnome-session --session=gnome-flashback &
gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
vncconfig -nowin &i

session参数可在/usr/share/gnome-session/sessions/中查看。

vnc加密

从设计上说,VNC使用的远程帧缓存(RFB)并不是一种安全的协议,VNC客户端直接连接到VNC服务器上并不明智。任何敏感信息在VNC流量中被轻易地泄露。因此,建议使用SSH隧道来加密VNC流量。
在运行VNC客户端的本机上,使用下面的命令来创建一个连接到远程VPS的SSH通道。当被要输入SSH密码时,输入用户的密码。
ssh vnc@<VPS-IP-address> -L 5901:127.0.0.1:5901
一旦SSH通道建立,远程VNC流量就会通过ssh通道路由并发送到127.0.0.1:5901。现在启动VNC客户端(比如:vinagre),来连接到127.0.0.1:5901。

ubuntu 14.04重启服务:sudo service vncserver restart

显示 Gitment 评论