远程管理之VNC

远程管理的基本概念

RDP(remote desktop protocol)协议  远程桌面协议,我们常用的windows操作系统就是的远程桌面管理就是基于该协议的,更多有关RDP协议的可以查看百度百科 RDP 

telnet  CLI界面下的远程管理工具,因为其历史非常悠久,几乎所有的操作系统都有该工具(telnet在传送数据时是通过明文传输的,没有加密,所以现在几乎都不会使用telnet来进行远程管理了)  telnet

SSH(Secure Shell)协议  CLI界面下的远程管理工具,几乎所有的操作系统都有(区别于telnet,SSH在进行数据传送时会对数据进行加密,所以SSH是比较安全的协议),几乎所有的类UNIX操作系统都是采用SSH来进行远程管理(Linux、BSD、Mac OS等)。  SSH

RFB(Remote FrameBuffer)协议  图形化远程管理协议,VNC(Virtual Network Computing)就是基于该协议的,上面讲的SSH在类UNIX下是CLI界面常用的远程管理方式,那么在类UNIX操作系统中,同样存在图形化的远程管理工具,VNC就是类UNIX系统下常用的图形化远程管理工具  VNC

 

VNC概述 

VNC (Virtual Network Computing)是虚拟网络计算机的缩写。VNC 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的。VNC 是在基于 UNIX 和 Linux操作系统的免费的开源软件远程控制能力强大,高效实用,其性能可以和 Windows 或 MAC 中的任何远程控制软件媲美。在 Linux 中,VNC 包括以下四个命令:vncserver,vncviewer,vncpasswd,和 vncconnect。大多数情况下只需要其中的两个命令:vncserver 和 vncviewer。目前,原来的AT&T版本已经不再使用,因为更多有重大改善的分支版本已经出现, 像是RealVNC, VNC tight 和UltraVNC。 Real VNC 是当前最活跃和强大的主流应用。

VNC原理

VNC系统由客户端,服务端和一个协议组成。VNC的服务端目的是分享其所运行机器的屏幕, 服务端被动的允许客户端控制它。 VNC客户端(或Viewer) 观察控制服务端,与服务端交互。 VNC 协议 Protocol (RFB)是一个简单的协议,传送服务端的原始图像到客户端(一个X,Y 位置上的正方形的点阵数据), 客户端传送事件消息到服务端。

服务器发送小方块的帧缓存给客户端,在最简单的情况,VNC协议使用大量的带宽,因此各种各样的方法被发明出来减少通讯的开支,举例来说,有各种各样的编码方法来决定最有效率的方法来传送这些点阵方块)

协议允许客户端和服务端去协议哪种编码会被使用,最简单的编码,被大多数客户端和服务端所支持的是, 从左到右的像素扫描数据的原始编码, 当原始的满屏被发送后,只发送变化的方块区域。这种编码在幁间只有小部分屏幕变化的情况下工作的非常好(像是鼠标键在桌面移动的情况,或在光标处敲击文字),不过如果大量的像素同时变化带宽将会增加的非常高,像是拖动一个窗口或观看全屏录像。

VNC默认使用TCP端口5900至5906,而JAVA的VNC客户端使用5800至5806。一个服务端可以在5500口用“监听模式”连接一个客户端,使用监听模式的一个好处是服务端不需要设置防火墙。

UNIX上的VNC称为xvnc,同时扮演两种角色,对X窗口系统的应用程序来说它是X server,对于VNC客户端来说它是VNC服务器程序。

 

实验环境

     VNC服务端:

             操作系统:Red Hat Enterprise Linux Server release 5.7 (Tikanga)

             VNC 包括以下四个命令:vncserver,vncviewer,vncpasswd,和 vncconnect。

     VNC客户端:

             操作系统:Windows 7专业版  64位操作系统

 VNC安装配置

1、安装VNC包

[root@localhost /]# cd  /mnt/cdrom/Server

[root@localhost /]# rpm -ivh vnc-server-4.1.2-14.el5_6.6.x86_64.rpm

[root@localhost /]# rpm -ivh vnc-4.1.2-14.el5_6.6.x86_64.rpm

验证vnc-server包是否安装成功:

[root@localhost /]# rpm -qa vnc-server

vnc-server-4.1.2-14.el5_6.6

[root@localhost /]#yum install tigervnc-server  另外一种安装。

2、启动vncservers 

如果此时不设置VNC用户密码,启动vncserver服务,则会报如下错误:root@localhost ~]# service vncserver start      Starting VNC server: 1:root [FAILED]

[root@localhost /]# vncpasswd          #设定当前用户root登录VNC的密码

 Password:

Verify:

[root@linuxidc ~]# vncserver           #每一次启动VNCSERVER   注意 :多次使用这个命令就会启动多个端口,最终能启动多少个端口最终由配置文件的编号决定,假设你启动了5个端口,配置文件只写了2个,服务或服务器重启启动后只有2个。

 

New 'linuxidc.com:2 (root)' desktop is linuxidc.com:1     #访问VNC方式用户名:1  说明是5901

Starting applications specified in /root/.vnc/xstartup

Log file is /root/.vnc/linuxidc.com:1.log

[root@linuxidc ~]# ps -aux |grep vnc   #查看vnc进程  

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ

root      2514  0.1  0.8  47540  7432 pts/0    S    10:56   0:00 Xvnc :1 -desktop linuxidc.com:1 (root) -httpd /usr/share/vnc/classes -auth /root/.Xauthority -geometry 1024x768 -depth 16 -rfbwait 30000 -rfbauth /root/.vnc/passwd -rfbport 5901 -pn

此时已经通过vnc远端登录了linux系统,但是此时的桌面只是简单的界面,如果需要启用gnome桌面

程序需要通过以下设置:

[root@linuxidc ~]# cd .vnc     #进入到vnc服务的文件夹进行配置启动脚本

[root@linuxidc .vnc]# ls

linuxidc.com:1.log  linuxidc.com:1.pid  linuxidc.com:2.log  linuxidc.com:2.pid  passwd  xstartup

[root@linuxidc .vnc]# vim xstartup     #修改如下图

wKiom1joUS3Rpz-2AAJZTh6g2Xo743.jpg 

 修改设置完毕后,需重新启动系统,否则设置不会生效,或者把所有开启的VNC远端桌面进程,终止掉后再重新运行vncserver服务。

 

 先查看vnc服务运行了几个进程:

[root@linuxidc ~]# vncserver    #第二次启动vncserver ,启动了第二个端口  说明两个都是root启动的

[root@linuxidc ~]# ps -aux |grep vnc   #查看vnc进程  

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ

root      2514  0.1  0.8  47540  7432 pts/0    S    10:56   0:00 Xvnc :1 -desktop linuxidc.com:1 (root) -httpd /usr/share/vnc/classes -auth /root/.Xauthority -geometry 1024x768 -depth 16 -rfbwait 30000 -rfbauth /root/.vnc/passwd -rfbport 5901 -pn

root      2713  2.0  0.8  47544  7424 pts/0    S    10:58   0:00 Xvnc :2 -desktop linuxidc.com:2 (root) -httpd /usr/share/vnc/classes -auth /root/.Xauthority -geometry 1024x768 -depth 16 -rfbwait 30000 -rfbauth /root/.vnc/passwd -rfbport 5902 

 

通过查看发现运行了2个vnc进程,需要终止这1 个vnc运行进程:

[root@linuxidc ~]# vncserver -kill :1  #关闭第一个vnc进程

Killing Xvnc process ID 2514

[root@linuxidc ~]# vncserver :1    #重启启动vncserver 

New 'linuxidc.com:1 (root)' desktop is linuxidc.com:1

Starting applications specified in /root/.vnc/xstartup

Log file is /root/.vnc/linuxidc.com:1.log

 

3、配置多个用户的vncservers文件   注意: 这个文件需要vncserver启动才能生成。

修改/etc/sysconfig/vncservers文件,将最后两行配置信息取消注释,添加系统账号。

# The VNCSERVERS variable is a list of display:user pairs.

VNCSERVERS="1:root  2:zzhz"#修改信息

VNCSERVERARGS[1]="-geometry 1024x768 -nolisten tcp -nohttpd "#修改信息

VNCSERVERARGS[2]="-geometry 1024x768 -nolisten tcp -nohttpd "    #修改信息

 说明:VNCSERVERS 是用来设定可以使用VNC的服务器账号,可以设定多个,例如上面root、etl,但是中间要用空格隔开。使用VNCVIEWER登录时,192.168.48.128:1表示是以root账号登录,以此类推。

关于参数配置说明:

1:-geometry 表示桌面分辨率,默认为1024x768,所以上面的1024x768也可以不写。

2:-nohttpd  表示不监听HTTP端口(58xx)。

3:-nolisten tcp 表示不监听TCP端口(60xx)

4:-localhost 只运行从本机访问。

5:AlwaysShared 默认只允许一个VNCVIEWER连接,此参数表示同一个显示端口允许多用户同时登录.

6:-depth  表示色深,参数有8,16,24,32.

7: SecurityTypes None 登录不需要密码认证VncAuth默认值,要密码认证。

4、设置另一账号VNC用户密码

[zzhz@localhost ~]$ vncserver   #启动zzhz账号的端口

[root@localhost /]# su - zzhz # 不同账号生成密码时,同时也生成一个文件xstartup文件。

[zzhz@localhost ~]$ vncpasswd

Password:

Verify:

[root@localhost ~]# ps -aux | grep vnc       最终能启动多少个端口最终由配置文件的编号决定
root      2514  0.1  0.8  47540  7432 pts/0    S    10:56   0:00 Xvnc :1 -desktop linuxidc.com:1 (root) -httpd /usr/share/vnc/classes -auth /root/.Xauthority -geometry 1024x768 -depth 16 -rfbwait 30000 -rfbauth /root/.vnc/passwd -rfbport 5901 -pn

root      2713  2.0  0.8  47544  7424 pts/0    S    10:58   0:00 Xvnc :2 -desktop linuxidc.com:2 (root) -httpd /usr/share/vnc/classes -auth /root/.Xauthority -geometry 1024x768 -depth 16 -rfbwait 30000 -rfbauth /root/.vnc/passwd -rfbport 5902 

zzhz      5566  2.0  0.8  47544  7444 pts/0    S    10:58   0:00 Xvnc :3 -desktop -desktop linuxidc.com:3 (zzhz) -httpd /usr/share/vnc/classes -auth /home/zzhz/.Xauthority -geometry 1024x768 -depth 16 -rfbwait 30000 -rfbauth /home/zzhz/.vnc/passwd -rfbport 5902 -pn

[root@localhost ~]# netstat -tnlup | grep X

tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 5515/Xvnc
tcp 0 0 0.0.0.0:5902 0.0.0.0:* LISTEN 5566/Xvnc
tcp 0 0 0.0.0.0:5903 0.0.0.0:* LISTEN 5566/Xvnc 

5、启动vncserver服务

[root@localhost ~]# service vncserver start #重启后服务将自动关闭

[root@localhost ~]#chkconfig vncserver on  #开机自动启动服务

6、配置xstartup文件 (同上图上配置)

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

[zzhz@localhost ~]$ vi /home/etl/.vnc/xstartup# 修改同上。

7、客户端连接服务器

关于VNC服务使用的端口号与桌面号相关,VNC使用TCP端口从5900开始,对应关系如下 
桌面号为“1” ---- 端口号为5901 
桌面号为“2” ---- 端口号为5902 
桌面号为“3” ---- 端口号为5903 

 

 

8、配置防火墙

如果你不配置防火墙,此时用VNC Viewer连接的话,一般会报:"connect:Connection timed out(10060)"错误,如下所示:

 

[root@localhost ~]# iptables -I INPUT -p tcp --dport 5901 -j ACCEPT

[root@localhost ~]# iptables -I INPUT -p tcp --dport 5902 -j ACCEPT

 

 

 

posted @ 2016-08-22 15:18  yuanbangchen  阅读(5284)  评论(0编辑  收藏  举报