在开源领域,远程遥控技术的代表就是VNC了。VNC(Virtual Network Computer,虚拟网络计算机)是一套由AT&T实验室开发的可操控远程计算机的软件。根据主控端与被控端的不同,VNC软件可以分为两个部分,分别为VNC Server与VNC viewer。前者是安装在被控制端上,而后者被安装在主控端上。VNC软件不仅是开源的,而且是跨平台的。有不少系统管理员喜欢在Windows平台上使用这个VNC来作为远程管理Linux服务器或者客户端的工具。(更多细节请参见:http://os.51cto.com/art/201102/244861.htm)
整个VNC运行的工作流程如下:
(1)VNC客户端通过浏览器或VNC Viewer连接至VNC Server。
(2)VNC Server传送一对话窗口至客户端,要求输入连接密码,以及存取的VNC Server显示装置。
(3)在客户端输入联机密码后,VNC Server验证客户端是否具有存取权限。
(4)若是客户端通过VNC Server的验证,客户端即要求VNC Server显示桌面环境。
(5)VNC Server通过X Protocol 要求X Server将画面显示控制权交由VNC Server负责。
(6)VNC Server将来由 X Server的桌面环境利用VNC通信协议送至客户端,并且允许客户端控制VNC Server的桌面环境及输入装置。
本文介绍如何使用VNC进行Linux服务器的远程管理,并着重标注了过程中需要注意的安全事项。
1、启动VNC服务器
利用VNC软件实现远程控制的基本原理是主控端利用VNC客户端发起连接请求,被控端同意后即可建立远程控制。此时主控端就可以远程操控被控端。为此要利用VNC软件来远程操控Linux操作系统的话,必须先在Linux操作系统上启动VNC服务器软件。否则的话,是无法建立VNC连接的。不过在大部分的Linux操作系统中,如红帽子的Linux系统,一般默认都会安装有VNC服务器的。不过其出于安全的考虑,一般都是关闭的。如果系统管理员要想利用VNC来实现远程操控的话,就需要在Linux操作系统上启动VNC服务器。
在Linux操作系统的命令行下,系统管理员可以输入vncserver命令来启动VNC服务器。在启动的过程中为了安全起见,操作系统会提示系统管理员输入VNC连接的密码。系统管理员最好能够在这里输入比较复杂的密码,如英文字符与数字结合的密码,以增加供给者破译的难度。由于建立VNC连接后,主控端可以像操作自己的电脑那样来操作被控端。所以这个密码将是将是保障其安全的最后屏障。启动成功后如图1所示:
图1 启动VNC Server示意图
密码配置完成后,Linux操作系统最后还会提示VNC连接的地址。如上面所示,最后系统管理员可以使用localhost.localdomain来远程操控Linux操作系统。以后在VNC客户端上只要输入这个网络地址,就可以连接到VNC服务器上。如果后续需要更改VNC的连接密码,需要使用vncpasswd来进行更改。注意不是passwd。这跟更改用户密码的命令不同。一般情况下,只要正常显示了其网络地址,那么这个VNC服务就是正常启动了。
另外为了安全起见,中断VNC服务器之后,最好在服务器上能够及时关闭VNC应用服务器。关闭的命令如上,只需要运行如下命令即可:
#vncserver –kill :1
其中最后的1表示之前启动的窗口编号。系统管理员应该养成一个习惯,即当某个服务启动后,要及时关闭它。多启动一个服务,就多个黑客一个攻击的机会。特别是将操作系统当作服务器来使用的时候,这个习惯能够在很大程度上提高服务器系统的安全性。一般来说,Linux操作系统默认不启动的服务,系统管理员在启动他们之后,最后都要及时关闭。
不过如果是企业内部,企业的布局比较大,如从系统管理员的办公室到Linux操作系统客户端那边需要走半个小时,此时为了管理的方便,如果对方操作系统只是用来做普通的客户端的话,那么就可以让Linux操作系统在启动时自动启动VNC服务器。由于客户端的安全性要求不怎么严格,所以在管理便利上方面可以做出一定程度的妥协。但是如果操作系统是作为服务器的话,那么开机自动启动VNC服务器类似的操作,系统管理员需要谨慎。
如果系统管理员确定需要开机时自动启动VNC服务器,则可以通过ntsysv服务来定义。即只需要在命令行状态下,输入命令ntsysv,然后选中vncserver条目(按空格选择),即设置了开机即启动VNC服务器。然后需要修改/etc/sysconfig/vncservers配置文件。找到这个文件中的VNCSERVER=”1:root”这个条目。默认情况下操作系统是将这一行注释掉的。系统管理员只需要将前面的注释符号去掉即可。如此设置后,当操作系统在下次启动后就会自动启用VNC服务器。
2、使用VNC Viewer实现Linux远程管理
在配置好VNC Server后,可以使用VNC Viewer来实现Linux的远程登录和管理了。在Linux下面已经自带了该客户端程序,用户可以打开[应用程序]菜单,在弹出的级联菜单中选择[VNC Viewer],如图2所示:
图2 使用VNC Viewer
系统会弹出如图3所示的VNC Server登录对话框,用户需要指定待登录的服务器地址:
图3 输入VNC Server地址
输入地址后,VNC Viewer连接上VNC Server,Server需要对VNC客户端进行身份验证,弹出如图4所示的对话框,用户输入之前设置的密码即可:
图4 输入密码
待客户端通过服务器端的验证后,则会进入如图5所示的远程登录界面,用户就可以在图形界面下简单、方便地对远程的Linux进行访问和管理了。
图5 成功使用VNC Server
3、使用SSH+VNC实现安全的Linux远程桌面管理
VNC可以对数据进行压缩,使得传输的数据量比直接用SSH加密的小,但是缺点有一到两次机会让同一网段的计算机用sniffer窃听到用户名和密码。认证之后的数据可以进行加密传输,所以使用过程中如果经过配置,则是安全的,否则传输内容不能保证完全保密。必要时可以通过SSH进行加密端口映射来保证传输用户名和密码的时候也是加密的,这一操作占用的额外带宽是极少的。
至于SSH保护VNC的安全,需要使用SSH的端口转发功能。一般在客户端使用的是Linux的时候,可以先用SSH建立链接,语法上应当添加“-L 本地端口:本地地址:远程端口 远程地址”这一附加参数,比如说本地是X.Y.Z.W,服务器是A.B.C.D,要转发的端口本地的是5901,远程的也是5901,那么命令应当是:
ssh -L 5901:X.Y.Z.W:5901 A.B.C.D
其他的参数多数可以同时使用。执行完毕后就已经创建了服务器5901端口和本地5901端口的加密隧道。假设要链接的服务器上运行的VNC桌面号是2,则继续执行如下命令:
vncviewer A.B.C.D:2
这样打开的VNC窗口所有数据都经过了SSH的加密。
由于一般管理情况下多采用SSH的Windows客户端,所以下面介绍如何配置Windows下的SSH Secure Shell来配合VNC实现安全的Linux远程桌面管理。
首先,在SSH Secure Shell的主界面上选择Settings下的Tunneling,如图6所示。
图6 为SSH Secure Shell设定Tunneling
然后,选择添加一个配置,如图7所示,其中Listen是本机端口,Destination是远程地址和端口,Display可以设定自己的描述。
图7 Tunneling设定的具体选项
最后,再运行vncviewer来链接即可。特别值得注意的是:此处Server的地址不是需要连接的VNC Server的地址,而是前面设定的本机的SSH侦听端口的地址,因为所有通往VNC Server的流量都需要先经过本机的SSH进行转发,如图8所示,一般设定为localhost加端口即可,该端口就是在图7中设定的SSH的侦听端口。
图8 使用Windows中的VNC Viewer连接Linux端的VNC Server
图9清晰地给出了使用Wireshark对上述通信的流量进行抓包的结果,可以看到,从客户端去往服务器端的VNC流量,均采用SSH协议进行了加密传输,因此针对传统的未经过SSH加密处理的VNC通信来说要安全很多,能够有效地避免窃听和中间人攻击:
图9 针对上述通信流程的抓包结果显示
本文出自 “卓越始于足下” 博客,谢绝转载!