图1 VNC工作原理 |
VNC可以轻松实现对Linux服务器远程管理,整个VNC运行的工作流程如下:
(1) VNC客户端通过浏览器或软件连接至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服务器、客户机使用的是操作系统是RedHat Linux 9.0。
1、 安装启动VNC服务器
在Redhat Linux 9.0发行版本光盘中可以找到VNC服务器软件。也可以在VNC的网站下载,官方网址:http://www.uk.research.att.com/archive/vnc/download.html 最新版本:3.37。 下载链接:http://www.realvnc.com/dist/vnc-3.3.7-1.i386.rpm
安装命令:
#rpm –ivh vnc-server-3.3.3r2-47.i386
启动VNC服务器
#vncserver
You will require a password to access your desktops.
Password: xxxxxxxx “第一次运行需要输入密码”
Verify: xxxxxxxx
New 'X' desktop is www.cao.com:1
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/www.cao.com:1.log
以后你想要更改VNC Server的密码,只要执行vncpasswd命令即可。linux上的vnc server内定的桌面管理环境是twm图像效果比较差,修改$HOME/.vnc/xstartup这个文件, 把所有内容的行前加上#,再在接尾部份加上:startkde &,使用KDE界面。
2、 在客户机连接VNC服务器方法:
(1)使用VNC客户端软件:
$ vncviewer www.cao.com:1 #或者IP地址:1#
输入连接密码后即可连接到VNC服务器的图形界面。
现在你可以使用鼠标和键盘在客户端控制VNC服务器的桌面操作及输入装置。如果你需要查询服务器上是否有你的传真到达,可以直接用鼠标点击“开始”-“图形”-“传真查看器”就想在本地主机上一样。图2是在Linux客户机上进行服务器传真查询的截图。
图2 用VNC客户端连接远程Linux服务器 |
图2中外围的大桌面是Linux客户端界面,VNC内嵌的桌面就是远程Linux服务器的桌面环境。这时就可以在服务器自由的上收发传真了。
(2)使用安装Java applet的浏览器连接远程服务器
首先在Linux客户端的浏览器上安装Java插件。然后直接在浏览器地址栏输入服务器端的IP:5801后输入密码经过验证如图3。输入密码经过验证后会图4界面。
图3输入密码经过验证 |
图4使用浏览器连接远程Linux服务器 |
在图4中,外围的大桌面是Linux客户端界面,浏览器内嵌的桌面就是远程Linux服务器的桌面环境。这是远程设置Samba服务器的界面。图5是Windows 客户端的浏览器上连接VNC服务器的界面。
图5是Windows 客户端的浏览器上连接VNC服务器的界面 |
在图5中,外围的大桌面是Windows客户端界面,IE浏览器内嵌的桌面就是远程Linux服务器的桌面环境。这是远程设置NFS服务器的界面。
#p#副标题#e#
二、使用OpenSSH连接VNC
从上面的介绍我们意识到使用VNC的好处,可以方便快捷的建立远程连接,下面要考虑安全问题。因为VNC 在因特网通道上都是不安全的。除了口令外整个远程显示在公共路由器上是在未经加密的情况下传输的。如果想要使用这些技术在全世界范围(或者甚至跨城市)共享远程Linux计算机,那么 VNC 应该被放置在 SSH 上。SSH 甚至(可选地)添加其自己的压缩层来增强性能。
这里我们选择一个VNC和OpenSSH集成工具:SSHTools。它被定义为“为Java服务的开放资源安全装置工具包(Secure Shell toolkits)”。它将工具包和日常使用的应用程序绑在一起。SSHTerm 可以提供:基于口令的安全验证(ssh1)和基于密匙的安全验证(ssh2)两种方法。SSHTerm程序就是一个典型例子,和其他的用于商业的SSH客户端相比,SSHTerm是一个更完善的SSH客户端。SSHTools还包括了一个VNC应用程序和一个SSH后台程序。它包括:SSHVNC、SFTP、OpenSSH(版本3.4)几个安全工具。主页是:http://3sp.com/products/sshtools/sshvnc/sshvnc.php
(1)软件安装:
安装软件前需要配置Java虚拟机,然后执行命令:
#chmod +x SSHTerm-0.2.2-linux-withVM.bin
#chmod +x SSHVnc-0.1.3-linux-withVM.bin
./ SSHTerm-0.2.2-linux-withVM.bin
./ SSHVnc-0.1.3-linux-withVM.bin
安装非常简单,安装程序设计的非常好可以直接在桌面建立快捷方式,其他的在只要按照安装向导提示即可。
(2)配置步骤:
1. 首先进行VNC服务器配置,点击主菜单“File”-“New Connection”这里需要填写远程Linux服务器名称或IP地址,OpenSSH端口“22”、远程登录用户名、密码验证方式等信息。如图6。
图6配置远程Linux VNC服务器信息 |
说明:SSHTerm支持口令(password)、公钥(PublicKey)、公共键识别(Keyboard Interactive)三种认证方法。
2. 接着点击“Protocol”选项选择进行OpenSSH的“口令的安全验证”或“密匙的安全验证”的方式。
3. 然后点击“Proxy”选项选择代理服务器选项。SSHTerm支持“HTTP”、“SCOKS 4”、“SCOKS 5”三种代理服务器。
4. 接着点击“Terminal”选项设置远程终端的类型、颜色、字体等选项。
5. 最后点击“Commands”选项在“Start users shell”,表示登陆后启动自己的shell界面。
(3)连接远程VNC服务器:
配置结束后点击“Connect”按钮进行远程连接Linux服务器,中间要进行两次口令的安全验证,大约需要十秒钟的时间。(时间由客户机和LinuxVNC服务器距离和带宽决定)。连接成功后就可以对Linux服务器进行直接操作了,SHHTerm内置了一个FTP工具:SFTP(使用SSH1和SSH2协议的类FTP程序)。SFTP可以在连接到大量远程服务器上时,大大提高了灵活性。
点击“SHHTerm”主选单-“Tools”选项-“SFTP Session”选项打开。下面是笔者向VNC服务器上传文件:点击“File”选单-“Upload files ”选项然后选择上传的文件名和上传目标文件夹回车即可,如图7,说明:由于使用的压缩技术,文件传输速度明显加快。
图7上传文件到Linux VNC服务器 |
(4)直接使用远程服务器桌面程序:
有时你需要直接连接远程服务器的桌面和公司同事互相协同进行图形操作。此时就需要使用另外一个安全工具:SSHVNC。它的连接方法和SSHTerm基本相同。需要注意是在“VNC”选项:连接服务器的方式(“LAN”、“512KB DSL”、“56KB Dial- up”),以及远程Linux服务器显示端口、图像质量(1-9,建议连接距离比较远时设定值不要太高,否则桌面操作速度会比较慢)、数据压缩级别(1-9)、是否共享桌面等如图8。
图8 配置SSHVNC连接方式 |
配置结束后点击“Connect”按钮进行远程连接Linux服务器,中间要进行两次口令的安全验证,大约需要三十秒钟的时间(由于要连接桌面图标时间会长一些)。现在你可以使用鼠标和键盘在客户端控制VNC服务器的桌面操作及输入装置。在任何一个办公系统中OFFICE软件都是重要的,下面可以直接使用VNC服务器的办公程序“OpenOffice”办公套件的“OpenOffice Calc”制作电子表格和直方图:用鼠标点击“开始”-“办公”-“OpenOffice Calc”“OpenOffice Draw”然后就可以直接进行操作,如图9。
图9 远程进行图形操作 |
图8中大桌面是Linux客户端界面,SSHVNC内嵌的桌面就是远程Linux服务器的桌面环境。通过鼠标和键盘就可以实现远程操作。当然现代意义远程办公的还包括互联网服务、多媒体软件操作等等。这里通过SSHVNC都轻松可以完成。SSHVNC还有Windows 版本通过它可以实现Linux 和windows 服务器的双向安全控制,这是前面介绍的Freenx无法完成的。图10是SSHVNC在Windows下安装界面。
图10 SSHVNC在Windows下安装界面 |
SSHVNC在Windows下配置方法和在Linux下完全相同,这里就不赘述了。图11 是SSHVNC在Windows远程管理Linux服务器的界面。
图11 SSHVNC在Windows远程管理Linux服务器的界面 |
#p#副标题#e#
三、连接故障排除
一般可以使用如下步骤:
1、检查本地或远端计算机是否有开启了防火墙,如果有,请确认是否关闭远程连接的端口(SSHVNC软件使用端口:22,使用浏览器连接的端口:5801-5900)。
2、检查远端计算机是否通过代理服务器共享上网,如果是,请在代理服务器上针对“远程登陆功能”设置相应的端口映射。
3、检查远端计算机是否为用户设置了密码,如没有,会出现“由于账户限制无法登陆”的提示。
4、使用浏览器登陆远程Linux服务器必须安装Java插件。在浏览器的菜单中选择文件-打开文件-然后选择你要安装的XPI扩展插件文件。稍后就可以看到浏览器会询问你是否要安装这个插件,点击“是”即可,这样做是为了安全,因为默认情况下,你无法从任何网站安装插件。另外注意新安装的插件必须在重启浏览器后才能生效(关闭所有的浏览器窗口,包括扩展,主题等窗口)。
5、Linux VNC服务器允许多台计算机使用远程连接功能,它是“多路复用的”,也就是说无论是没有客户桌面观看的情况还是有多个客户在同时观看,都不会影响图形应用程序的继续运行。但是每个用户要使用不同端口。
6、分辨率设置技巧:
通常情况使用:1024x768 以上的远程图形分辨率和本地 1280x1024 分辨效率频设置配合的非常好。只留了一点额外空间以放置 VNC 标题栏和本地桌面任务栏。但是 vncviewer 窗口依然占用着几乎整个屏幕,这很漂亮。在 100 Mbit 以太网连接的情况下,这种连接几乎丝毫不逊于本地显示。在 10 Mbit 以太网上,当移动和缩放窗口时,可以看到轻微的图像延迟。所以请根据网络带宽情况和计算机性能合理设置分辨率。
#p#副标题#e#
四、Linux远程访问服务器的维护
现在许多网管员通过远程方式来维护企业网络的Linux远程访问服务器正常运行。
(一)定时自动运行VNC程序
Linux有一个称为crond的守护程序,主要功能是周期性地检查 /var/spool/cron目录下的一组命令文件的内容,并在设定的时间执行这些文件中的命令。用户可以通过crontab 命令来建立、修改、删除这些命令文件。例如用 crontab命令实现每天VNC服务器的定时启动:
#crontab -e
文件内容:
35 08 * * * vncserver
用vi编辑后存盘退出。使用 crontab命令添加到任务列表中:
#crontab myproject
这样远程Linux服务器会在每天的8点35分会自动启动VNC服务器。
(二)远程关闭VNC服务器和重启
从安全考虑即使使用OpenSSH连接在不使用VNC服务器时应当关闭它。另外Linux是个多用户的操作系统,如果有一天你要维护服务器,此时不能有用户来登陆服务器,此时关闭VNC服务器的任务可以在远程由系统管理员完成。
(1)使用SSHTerm杀掉VNC进程
使用SSHTerm远程登陆VNC服务器,执行命令:
#lsof -i tcp|grep LISTEN|more #查看VNC进程号#
xinetd 2148 root 5u IPv4 2411 TCP www.cao.com:1025 (LISTEN)
X 2755 root 1u IPv4 14975 TCP *:x11 (LISTEN)
Xvnc 2972 root 0u IPv4 22319 TCP *:6002 (LISTEN)
Xvnc 2972 root 3u IPv4 22322 TCP *:5902 (LISTEN)
Xvnc 2972 root 4u IPv4 22326 TCP *:5802 (LISTEN)
然后使用命令Kill关闭VNC进程即可:
Kill -9 2972
(2)使用浏览器直接关闭
可以直接Linux客户端的浏览器上的“SendCtrl-Alt-Del”按钮,选择“关机”、“注销”或“重新启动”等操作。
(3)VNC服务器重新启动
以后如果再重新启动VNC服务器直接使用Linux下的SSH命令即可。此时为了使OpenSSH支持X11通过,要修改ssh_config和sshd_config文件,因为缺省设置禁止验证代理和X11转发,在ssh_config添加:
X11Forwarding yes
在ssh_config中添加:
ForwardAgent yes
ForwardX11 yes
目前的远程管理工具在安全性上已经相当可靠,因为从目前来看,如果要对这些远程管理方式进行攻击,所有的可能就是在传输中。在传输中,假设所有的信息都被截下来,由于解密的工作量非常大,它依然是安全的。如果使用IDA加密算法,用每秒钟可以猜测10亿密码的分析机器,需要2的19次方/年才可以解密。
总结:
到此为止我们主要介绍了基于通过SSH、FreeNX和VNC安全管理远程Linux服务器的方法,和传统的ssh命令行方式相比,界面友好性有很大改进。