sealyu

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  76 随笔 :: 82 文章 :: 17 评论 :: 0 Trackbacks

2008年7月11日 #

2001 年 12 月 01 日

本文是两篇比较 SSH、远程 X、VNC 和其它技术作为远程运行应用程序方法的文章的第 2 部分。在这一部分中,David 研究了一些 VNC 配置问题,提到了 IBM 的 Desktop On-Call,介绍了远程 X 并讨论了一些有关安全性的问题。

在有关共享计算机的这两篇文章中的 第 1 部分中, 我描述了我的异构本地网络以及如何使用它来比较和测试不同操作系统和体系结构上的应用程序。 有几种技术使一台工作站上的用户可以运行位于另一台工作站上的应用程序。SSH 提供到远程计算机的文本终端;可以使用 X Window 系统在一个并未实际运 行交互式应用程序的工作站上显示该应用程序;VNC 可以作为对整个远程台式机的“遥控器”。

每种技术都有优缺点。它们都在 Linux 上运行, 但不同变体(主机或远程)都允许与异构网络的其它各种 OS 环境进行交互。 使用这些工具的组合,我可以坐在一台工作站(比方说,具有最好的显示器、键盘和椅子的那一台)上,然后运行和测试多个平台上 的应用程序并对它们设定运行时间 ― 通常不用重新引导任何系统。

第 1 部分介绍了 SSH 和 VNC。第 2 部分将更多地讨论 VNC,然后再讨论远程 X 和安全性。

我的网络设置

我的 本地网络上有七个节点,分别命名为 Apollo、Bacchus、Chaos、Delphi、Echo、Fury 和 Gaia。按所列的次序为这些节点分配了从 192.168.1.101 到 192.168.1.107 的本地 IP 地址。大多数情况下,同一物理机器在多重引导到不同 OS 时总是获得相同的 IP 地址(但有时我使用 DHCP,它分配 192.168.1.200 以上的地址)。整个网络位于一个硬件防火墙/路由器后,而且我充分信任防火墙,以至于对于运行在本地机器上的服务,我也许并没有象应有的那样猜疑提防。需 要在公共因特网上共享计算机的读者应该比我更担心安全性问题。上面的详细信息将让读者理解下面给出的一些 shell 示例。我实际坐在 Bacchus 面前,它的 IP 地址是 192.168.1.102。





回页首


配置 VNC

第 1 部分中, 我演示了如何在 Linux 平台上启动 VNC,并且考虑了一些有关屏幕分辨率和颜色深度的问题, 但没有考虑有关配置和使用 VNC 的一些重要内容。 本文只集中讨论类 UNIX 的 Xvnc 服务器的使用。除了实现配置不同外,其它系统都有相似的概念,它们通常通过菜单和对话框,而不是通过命令行和配置文件进行配置。

vncserver 首次运行在一个给定的用户帐户内时,它要求您指定 VNC 客户机连接需要的密码。另外,创建了一些缺省配置文件。请看一下它的首次运行:


创建缺省 VNC 配置
[vnc-user@fury vnc-user]$ vncserver
You will require a password to access your desktops.
Password:
Verify:
New 'X' desktop is fury.gnosis.lan:3
Creating default startup script /home/vnc-user/.vnc/xstartup
Starting applications specified in /home/vnc-user/.vnc/xstartup
Log file is /home/vnc-user/.vnc/fury.gnosis.lan:3.log

这里,我创建了一个 VNC 会话。尽管在命令行上没有指定别的分辨率,将使用缺省分辨率。 缺省分辨率是 1024 x 768,而缺省颜色深度是 8 位。 第 1 部分演示了如何创建使用其它分辨率的脚本文件。

一开始要注意的事情是在首次运行期间创建的 ~/.vnc/xstartup 文件。 该文件控制创建 VNC 会话时发生的事情 ― 最需注意的是使用哪个窗口管理器。 首次创建 ~/.vnc/xstartup 时,指定的窗口管理器是 twm , 它是一个极小的窗口管理器,几乎每台 X Window 系统机器上都有 twm。从好的方面讲, twm 的极小本质几乎使它可能成为运行 VNC 的最为“带宽友好”的方法。从坏的方面讲, twm 不具备完整“桌面管理器”(象 KDE、GNOME 或 WindowMaker)的大部分花哨功能。 许多用户都想要编辑他们的 xstartup 。下面是我修改过的示例:


定制的 VNC“启动”
#!/bin/sh
xrdb $HOME/.Xresources
xsetroot -solid grey
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
#exec wmaker
exec startkde

在上面的示例中,我注释掉了缺省 twmxterm 的缺省启动。我还注释掉了我曾使用了一段时间的 WindowMaker 的启动。 实际上我并没有删除那些行,以防以后想要恢复它们。 我利用这个帐户实际上是为了启动 KDE。不过,我配置了这个特殊的 KDE 桌面 来避免背景和标题栏上的颜色渐变,并使用极少的动画效果。使桌面的繁忙程 度最小化可使 KDE 在通道带宽上变得更宽松。相似的原理适用于您所喜欢的任何一个窗口管理器。

最后要注意的是杀死已启动的 VNC 会话。 需要在服务器端完成这个任务(包括从 vncviewer 窗口,一旦杀死该服务器,该窗口将切断连接;但 这不会引起任何损害)。 查看已经启动了哪些 VNC 会话的快速方法是使用 ps -ax | grep vnc 。 如果您想结束某个会话,可以使用 Linux 的 kill 命令,但这会留下一些悬而未决的信号文件,需要您稍后手工删除它们。更干净的方法通常是使用 vncserver -kill :1 - 但如果要从 root 帐户强制杀死用户 VNC 进程,则使用 kill 命令。





回页首


Desktop On-Call 和 eComStation

developerWorks 上我写的“可爱的 Python”专栏和这两篇文章的读者 可能已经对我偶然提及 OS/2 的使用稍感惊讶,因为使用它的人数已在几年内 逐步减少(甚至在 IBM 内部更是如此)。 我的“正式”说法是大概观察到:OS/2 Warp 的 Workplace Shell 仍远远领先于已 经在 Linux、Windows、MacOS 或者甚至是 BeOS 上出现的任何 GUI。WPS 确实很好,但我继续使用的实际原因主要是我这部分的惯性使然。好几年以来,我构建了我所熟悉并很适合在 OS/2 上使用的大型工具集,而且它们彼此工作得很好。 当引导到其它系统时,我从来没有设法填补日常使用的所有不足(90% 的快乐仍需来源于偶然的重新引导)。

由于我的倔强,最近我因接收到一份 Serenity 系统的 eComStation 评估员副本而激动, 它是由第三方获许可者对 IBM 的 Warp 4.5/Workspace on Demand 所做的增强和重新绑定。eComStation(eCS)只是今年才发行的, 它包括“Warp 核心”的所有最新补丁和大量额外工具。

与 eCS 包括在一起的工具之一是名为“Desktop On-Call (DToC)”的 IBM 产品。 还有 Windows 和 Linux 版的 DToC 服务器,但很难在美国买到。DToC 所做的事情很象 VNC 所做的。DToC 服务器依附 HTTP 协议上(缺省情况下,使用端口 80),以通过网络(LAN 或因特网)为“远程台式机”提供服务。DToC 的客户机应用程序是任何启用了 JavaScript 和 Java 的 Web 浏览器。与使用 VNC Java 客户机一样,Web 浏览器基本上是至 DToC 的连接接口。而且,DToC 也有与 VNC 完全相同的问题:本地捕捉的击键、多键序列和带宽/分辨率权衡问题。

与 VNC 相比,DToC 有两个优点。安全性问题被集成到 DToC 中,而不是通过需要分别配置的其它层和转换。 依附在 HTTP 上意味着 DToC 比 VNC 更容易通过防火墙(但这有利有弊)。 此外,您会在 DToC 内部获得文件传送接口, 所以只要 DToC 在运行,就无须在服务器上运行单独的 FTP、Samba、NFS 或类似的文件传送服务器。 从不利方面看,总的说来,比起 VNC,DToC 感觉上响应较慢 ― 这并不可怕,但少许差了点。

与 eCS 绑在一起的另一个工具是名为 Hoblink X11 的 X 服务器。我至今还未对它进行过实验, 但当我对它进行实验时,这可能会使得为我本地网络的 OS/2 节点带来更好的集成(但还是 Linux “良好合作”做得最好)。





回页首


远程 X Window 系统

X Window 系统是响当当的软件思想。 尤其知道它首次于 1984 年发明(在 Microsoft Windows 1.0 之前且刚好在第一台 Macintosh 之后的一小段时间)就更了不起了。对于大多数 Linux 用户而言,X Window 系统(或“X11”, 但正确地讲 不是“X Windows”)可能只是其窗口管理器为在本地显示 GUI 应用程序而调用的 API。 但实际上 X11 是更有趣的东西。

X11 总是有一个客户机和一个服务器,即使当它们都运行在同一台实际机器上。X 客户机和 X 服务器或许会与人们最初认为它们是服务器或客户机的想法相反。X 服务器是乐意为底层的应用程序提供显示能力的设备。X 客户机是一种希望某个 X 服务器向它提供放置其可视输出的地方的特殊应用程序。

在本地工作站上运行时,服务器和客户机完全在一个内部通道上通信。 但当涉及到本地和远程机器时,本地机器通常是 X 服务器,而远程机器通常是 X 客户机。 然而,有时候您可能想要在您不在的工作站上显示某些信息,角色可能会颠倒。

X Window 系统本身实际只是一个具有诸如“在这些坐标上绘制一个窗口”等调用的 API。 为了实际让 X Window 系统做更多的事情,通常在它的上面运行一个 窗口管理器, 让您做一些如移动窗口、使它们最小化和启动新的 X 客户机等事情。

让我们看一下如何启动一个远程应用程序(X 客户机),以使它在本地工作站上显示。用于演示的所有机器都是 Linux,但其它具有 X 服务器和客户机的系统将以相似的方式工作。首先,我们要决定本地机器使用的 IP 地址; ifconfig 是完成这个任务的好工具:


查找本地机器(X 服务器)的 IP 地址
[root@bacchus /root]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:48:54:83:82:AD
inet addr:192.168.1.102 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:15933 errors:0 dropped:0 overruns:0 frame:0
TX packets:10426 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:10 Base address:0xe800

接下来,要确保远程机器上的应用程序将具有使用本地 X 服务器的本地许可权:


设置 X 服务器权限(首先全部除去)
[root@bacchus /root]# xhost -
access control enabled, only authorized clients can connect
[root@bacchus /root]# xhost +192.168.1.106
192.168.1.106 being added to access control list

接下来,需要能够启动应用程序以在远程机器上运行。 我们 可能会转到实际机器(或让其他人转去),但大多数情况下,打开远程 shell 会话是最简单的事情(这里,使用不安全的 telnet 方式):


连接到远程机器 Fury(X 客户机)
[root@bacchus /root]# telnet -l quilty 192.168.1.106
Trying 192.168.1.106...
Connected to 192.168.1.106.
Escape character is '^]'.
Password:
Last login: Tue Nov 27 18:07:51 from 192.168.1.201

如果一切都运行正常,远程机器将自动检测正在连接的机器。有关在不正常情况下要做些什么事情的信息,则请参阅下面的内容:


检查 X 客户机 Fury 上的 DISPLAY 环境变量
[quilty@fury quilty]$ echo $DISPLAY
bacchus.gnosis.lan:0

现在,我们可以启动 X 客户机。对于本示例,使用普通的(但挺有意思的)应用程序 xeyes (它在屏幕上显示一双跟随鼠标光标的眼睛):


在 X 客户机上启动应用程序以在 X 服务器上显示
[quilty@fury quilty]$ xeyes &
[1] 9939

启动远程应用程序时的一些故障

偶而,上述序列中的某些事情会发生故障。请看一下一些典型问题:


连接到远程机器 Delphi
[root@bacchus /root]# /usr/local/bin/ssh quilty@192.168.1.104
quilty@192.168.1.104's password:
Last login: Wed Nov 28 01:06:08 2001 from 192.168.1.201
Linux 2.2.19.

请尝试执行上面的序列:


检查 X 客户机 Delphi 上的 DISPLAY 环境变量
quilty@delphi:~$ echo $DISPLAY
quilty@delphi:~$ xeyes &
[1] 17668
quilty@delphi:~$ Error: Can't open display:
[1]+ Exit 1 xeyes

由于没有自动检测到 DISPLAY 环境变量的值,所以 X 客户机不知道哪个服务器将为它提供显示:


没有(或错误地)设置 DISPLAY,export 值
quilty@delphi:~$ export DISPLAY=192.168.1.102:0
quilty@delphi:~$ xeyes &
[1] 17669
quilty@delphi:~$ Xlib: connection to "192.168.1.102:0.0" refused by server
Xlib: Client is not authorized to connect to Server
Error: Can't open display: 192.168.1.102:0
[1]+ Exit 1 xeyes

继续前进,但 Bacchus 尚未授权 Delphi 使用它的 X 服务器(我们需要切换到本地 xterm 来修正这个问题):


X 服务器拒绝连接;启用它
[root@bacchus /root]# xhost +192.168.1.104
192.168.1.104 being added to access control list

一切都正常:


在 X 客户机上启动应用程序以在 X 服务器上显示
quilty@delphi:~$ xeyes &
[1] 17670





回页首


安全性问题

第 1 部分中, 我曾经提到 VNC 和远程 X11 在因特网通道上都是不安全的。整个远程显示在 公共路由器上是在未经加密的情况下传输的。 我不担心防火墙后面的专用 LAN。 但是,如果我想要使用这些技术在全世界范围(或者甚至跨城市)共享远程计算机,那么 VNC 或 X11 协议应该被放置在 SSH 上。做到这一点真的没有任何损失,而且 SSH 甚至(可选地)添加其自己的压缩层来增强性能。 但是,您需要配置它。

要在 SSH 上配置 VNC,最好是阅读文章“Making VNC more secure using SSH”(请参阅本文后面的 参考资料)。 这篇文章写得很好,描述了我可能要讲到的每一件事情。

将 X 放置在 SSH 上十分容易做到。假设正在使用 OpenSSH, 将需要修改名为 sshd_config 的文件来允许分层。 不同的 Linux 分发版将该文件放在稍微不同的地方。Mandrake 7.1 将它放在 /usr/local/etc/ ;Slackware 7.0 使用 /etc/ssh/ 。在任何情况下, 您都必须确保该文件包含下列内容:

 X11Forwarding yes 

将需要重新启动 sshd 守护程序来激活该设置。

实际上,一旦正确配置了 sshd ,就可以更容易地启动 X 客户机,以在本地 X 服务器上显示:


对于 X 客户机使用 sshd X11 转发
[quilty@bacchus quilty]$ ssh -X quilty@192.168.1.104
quilty@192.168.1.104's password:
Last login: Fri Nov 30 16:53:03 2001 from 192.168.1.102
Linux 2.2.19.
quilty@delphi:~$ echo $DISPLAY
delphi:10.0
quilty@delphi:~$ xeyes &
[1] 201

请注意,即使已连接到 Delphi, DISPLAY 变量仍似乎会指出 X 服务器在 Delphi 上。在某种程度上,就是这样,正讨论的 X 服务器是将显示交付给适当的远程计算机的 SSH 守护程序。



参考资料

IBM Desktop On-Call 参考资料

  • IBM 在 Desktop On-Call for Multiplatforms V4页面上提供了 Desktop On-Call 的产品信息。
  • eComStation 是 IBM OS/2 Warp/Workspace on Demand 的重新绑定和增强版, 它特别强调了在异构网络环境中更好地运行。
  • 将 Desktop On-Call 版本作为 eComStation 的一部分提供的 Serenity 系统还提供了 DTOC v4.0 手册的 在线版本

X Window 系统参考资料

  • XFree86网站是查看与这一受欢迎的自由软件 X Window 实现相关的所有信息的好地方。
  • 从技术上讲,XFree86 是正式的 X Window 系统的克隆(很象 Linux 是 UNIX 的“克隆”那样)。 实际上,您不必担心什么是正式的 - 所有版本彼此都会很好地合作。有关正式系统的信息(包括可用的源代码), 请转至 X.org 主页
  • 还可以获得 X Window 系统的许多商业实现:

其它参考资料



关于作者

David Mertz 的照片

David Mertz 是个讨人喜欢的人。他是计算机问题的克星。可以通过 mertz@gnosis.cx和 David 联系;可在 http://gnosis.cx/publish/上了解他的生活。欢迎对本文、过去的和以后的专栏文

posted @ 2008-07-11 23:42 seal 阅读(19) | 评论 (0)编辑 收藏

比较“安全 shell(SSH)”和“虚拟网络计算(VNC)”

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

将此页作为电子邮件发送

将此页作为电子邮件发送


级别: 初级

David Mertz,博士 (mertz@gnosis.cx), 程序员和作家, Gnosis Software,Inc.

2001 年 12 月 01 日

在 这两篇文章的第一篇中,David 比较和对照了“安全 shell(SSH)”和“虚拟网络计算(VNC)”,这两种技术允许用户在一台工作站上运行位于另一台计算机上的应用程序。(他没有涉及文件和打印共享 或诸如 httpd、ftpd、smtp 或 nntpd 之类的“因特网”服务,虽然这些技术也可以有效地“共享”上述计算机中的某些资源。)然而,他确实给出了 SSH 和 VNC 的安装和配置的提示,并评论了工具的稳定性、选项和许可证状况。

为有效地测试各种软件程序和撰写关于它们的文章,我在自己的本地网络上配备了大量计算机。这些机器运行各种操作系统并使用各种硬件配置。有时我会在各种平台上评测工具;而有时候会测试和调试自己编写的工具。

我网络上的大多数机器都以多重引导配置的方式安装了多种操作系统,但也有一些是“无头的”(无监视器或键盘)。虽然多重引导装入器适于容纳多种操作系统, 但由于只在一台机器上进行测试,重新引导的时间开销使得多平台的详细比较测试花费了更多时间。多重引导不太利于“并排”比较。我没有评测过任何让您在一个 系统内“虚拟”另一个系统的工具,譬如 VMWare、Plex86、VirtualPC、SheepShaver 或者其它工具。在某些方面,这些工具实现了我将在本文中讨论的那些工具的用途。

有几种不同的技术允许用户在一台工作站上运行位于另一台计算机上的应用程序。SSH 提供到远程计算机的文本终端;可以使用“X Window 系统”在一些工作站上显示交互式应用程序,而这些应用程序实际上运行在另一台工作站上;VNC 可以作为对于整个远程桌面的“远程控制”。每种技术都有优点和缺点。它们都在 Linux 上运行,但不同变体(主机或远程)允许与其它各种 OS 环境(用于异构网络)进行交互。使用这些工具的组合,我可以坐在一台工作站(具有最好的监视器、键盘和椅子的那一台)前,运行、测试并对多个平台上(通常不用重新引导任何系统)的应用程序进行计时。

我的网络设置

我的本地网络上有七个节点,命名为 Apollo、Bacchus、Chaos、Delphi、Echo、Fury 和 Gaia。分别为这些节点分配了从 192.168.1.101 到 192.168.1.107 的 IP 地址。大多数情况下,同一物理机器在多重引导到不同操作系统时总是获得相同 IP 地址(但有时我使用 DHCP,它分配 192.168.1.200 以上的地址)。整个网络位于一个硬件防火墙/路由器后,我充分信任防火墙,对于运行在本地机器上的服务,我也许并没有象应有的那样过分猜疑。(需要在因特网上共享计算机的读者应该比我更担心安全性问题。这两篇文章中的第二部分加入一些关于安全性问题的讨论。)

我提及了上面的大部分细节,以便您可以遵循我在下面给出的一些 shell 示例。我实际操作的机器是 Bacchus,它的本地 IP 地址是 192.168.1.102。





回页首


安全 shell(ssh)

最节省带宽的连接计算机方法是通过简单文本 shell。完成这个操作的非安全工具是 telnetrsh ,但使用这些工具会引起很多安全性问题,因此最好在所有需要通信的计算机上安装 ssh 。尽管下面的一些示例在我的防火墙之内使用了 telnet ,但这种折衷办法也是以下事实的产物 ― “Fury”目前专用于安装和重新安装测试操作系统。缺省情况下,许多类 UNIX 操作系统(包括最新的 Linux 分发版(distribution))将安装 ssh ;如果没有安装,请参阅本文后面的 参考资料来安装它。

安全 shell( ssh )对通过特定通道的所有信息流都进行加密。因为使用了公钥(public-key)加密,所以,服务器和客户机不必在会话开始(initiation)之前共享密钥。此外,机密不会在通道中以未加密格式传输(譬如,使用 telnet 传输登录密码则任何拦截器都可以截获它)。其它协议 ― 例如 VNC 或 X Window ― 可以位于 ssh 顶部,但是这些协议最简单的用途是用于创建远程文本控制台。

使用 ssh ,可以轻易地连接到与本地机器运行不同操作系统的机器上。唯一的要求是,远程机器运行 sshd 服务器,而本地机器要有 ssh 客户机。例如,要从运行 OS/2 Warp 的“Bacchus”机器连接到隔壁运行 Slackware Linux 的“Delphi”机器,就象下列清单一样简单:


使用 ssh 通过 HOSTS 名称连接到远程机器
C:"UTILS % ssh quilty@delphi
Last login: Thu Nov 29 01:41:36 2001 from 192.168.1.102
Linux 2.2.19.
quilty@delphi:~$ exit
logout
Connection to delphi closed.

如果我的 HOSTS 文件未定义别名,可以使用:


使用 ssh 通过 IP 连接到远程机器
C:"UTILS % ssh quilty@192.168.1.104
Last login: Thu Nov 29 01:51:31 2001 from 192.168.1.102
Linux 2.2.19.
quilty@delphi:~$

同样地,我经常通过使用下列命令跨越国界,在全世界管理我租用的 Web 服务器:


使用 ssh 通过 DNS 名称连接到远程机器
C:"UTILS % ssh gnosis@gnosis.cx
gnosis@gnosis.cx's password:

对于异构平台上的 ssh 来说,最困难的事情是正确地获得终端配置。实际上,这个问题并不是 ssh 本身的问题( telnet 也有同类的问题)。将两台 Linux 机器连接在一起几乎总是能无缝地工作。但是将安装其它平台的机器作为客户机或服务器时,显示总是不太正确,或者键绑定不象预期的那样工作。当涉及“非类 UNIX”平台诸如 Win32、BeOS、MacOS 和 OS/2 时,问题似乎尤其严重,但即使将 FreeBSD 与 Linux 连接也有缺点。

当在异构机器之间创建 ssh 连接时最典型的问题是代码页错误,或者色彩转义码错误。当任何一种情况发生时,基本命令行可用,但是线条(line-draw)字符显示成其它东西;经常只能看到单色终端而不是彩色的。shell 命令不大受这种“阻抗失谐(impedance mismatch)”影响,但是交互式 cursesslang 类应用程序通常会受影响。这些应用程序中最值得注意的是文本编辑器,它通常是您最需要在远程控制台上运行的应用程序。顺便说一下, jed 是一种特别好的远程文本方式编辑器;其强壮内核也许将使用 vim 。其它大多数 Linux/UNIX 编辑器不是基于 X 的就是极其粗糙的(或者是臃肿的,如 emacs )。

如果您遇到终端配置问题,就需要做几件事。如果您是在连接到类 UNIX sshd 服务器时出问题,请尝试更改远程 TERM 环境变量。例如:


常用远程终端设置
quilty@delphi:~$ TERM=vt100
quilty@delphi:~$ TERM=ansi
quilty@delphi:~$ TERM=linux

同时,本地 ssh 客户机通常会有办法来配置连接的终端类型。它可能是命令行选项、环境变量或菜单对话框,这取决于平台和客户机程序。您在连接的两端不应该使用完全相同的名称。要反复进行试验。还应该检查以确保在客户机配置内使用了“无代码页转化”。要测试“阻抗匹配(impedance match)”,则尝试运行一个全屏远程应用程序(例如 jed 或者另一个编辑器)。





回页首


虚拟网络计算(Virtual Network Computing(VNC))

VNC 是一种已经移植到许多 GUI 平台上的客户机/服务器系统。VNC 提供一种在本地系统上显示远程计算机整个“桌面”的轻量型协议。Symantec 的 pcAnywhere 是一种具有类似用途的商业产品,但是它仅限于 Microsoft 操作系统。相反,VNC 才真正可以在许多不同的操作系统上运行,并有多种实现和变体。

获得对 VNC 的感性认识的一个好方法是看它网站上的抓屏(请参阅 参考资料)。可能的组合比那里显示的多得多,但是显示的多个变体表明了多数。通常, 任何具有 VNC 客户机(通常称为 vncviewer )的平台可以在本地窗口内显示任何具有 VNC 服务器( vncviewer )的平台的虚拟桌面。调整大小和全屏选项也许可用,这取决于 VNC 客户机的版本。

VNC 服务器的基于 X 的版本( Xvnc )和用于其它平台的版本之间有一点差异。单用户系统诸如 Windows、MacOS、BeOS 和 OS/2 不具备“X Window 系统”所拥有的“桌面会话”概念。因此,例如 Windows VNC 服务器所显示的只是出现在与本地系统上的同一个 Windows 桌面的远程版本;当连接时这称为“桌面:0”。相反,X Window 是多用户和多会话的。每个 Xvnc 会话创建一个全新的桌面,可能有它自己的分辨率、窗口管理器和状态。换言之,X 对 VNC 的支持要好得多。

一旦安装了 VNC 服务器,启动会话很简单而且安装也很容易;请参阅 参考资料。对于单用户平台,由于基本上只运行应用程序,所以没有选项(第一次您将需要设置一些许可权)。在 X 下,一些命令行选项会有帮助。例如,我已经连接了一个从本地 OS/2 Warp“Bacchus”机器到 Mandrake Linux“Fury”机器的 telnet 会话,如下所示:


在 Fury 上启动 VNC 服务器会话
[root@fury quilty]# cat /usr/bin/vnc-sessions
vncserver -name TinyLinux -depth 8 -geometry 640x480
vncserver -name BigLinux -depth 32 -geometry 1260x940
[root@fury quilty]# vnc-sessions
New 'TinyLinux' desktop is fury.gnosis.lan:1
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/fury.gnosis.lan:1.log
New 'BigLinux' desktop is fury.gnosis.lan:2
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/fury.gnosis.lan:2.log

现在,我可以从客户端使用本地 vncviewer 连接到 Fury:1 或者 Fury:2 (或者同时连接两者)。如果愿意,也可以显式地指定 192.168.1.106:1

相同的的原则也适用于非本地网络,并且出于安全性目的,VNC 可以配置成隧道通过 SSH。

大多数情况下,具有一个到远程计算机的 vncviewer 连接,在功能上和坐在该远程计算机的本地监视器和键盘前面一样(假定它不是“无头的”)。从美学角度来看,将通过一个使用本地机器的小窗口 (widget)的窗口来构造远程系统的桌面(除非使用全屏选项)。最初这些额外的框架可能会分散一些注意力,但是使用了一段时间后,就很容易忽略它们 了。

选择适当的会话图形分辨率和色深很重要(假定您正在使用 Xvnc 服务器,就会有一个选项;或者在其它 vncserver 平台上,您希望将远程计算机的本地显示设定为适合自己的 VNC 需要的分辨率)。远程桌面分辨率越小,使用的色彩越少,则显示响应就越快。这样,屏幕资源对于许多应用程序来说是理想的。我发现减少色深对响应速度的影响比较小;VNC 的十六进制编码比简单的“象素到象素”屏幕传输的效率高得多。但是屏幕大小出现了明显差异。

通常,我发现使用诸如 1260x940 以上的远程图形分辨率和本地 1280x1024 视频设置配合的非常好。我只留了一点额外空间以放置 VNC 标题栏和本地桌面任务栏。但是 vncviewer 窗口依然占用着 几乎整个屏幕,这很漂亮。在 100 Mbit 以太网连接的情况下,这种连接几乎丝毫不逊于本地显示。在 10 Mbit 以太网上,当移动和缩放窗口时,可以看到轻微的延迟。在速度更慢的情况下,VNC 往往不是远程操作的最佳解决方案。电缆、DSL 或者 T1 连接仍然可用,但不是无缝的。任何比这些连接更慢的连接实际上只能用于紧急情况。

VNC 连接的一个问题是本地桌面出于自己的用途需要使用一些击键。许多远程击键可能必须使用组合击键操作来模仿,这取决于特定客户机。例如,我的本地 OS/2 vncviewer 需要按 Alt-A, F, Alt-A 来输入远程 Alt-F 。这些额外的敲击有时对于打字员来说难以适应。在非 PC 平台(例如 Mac)下情况更为复杂,因为它们有自己的键盘和(单键)鼠标。还有很多东西要学习和输入,但是通常会有一个方法来模仿所有远程输入动作。但是,Linux 到 Linux 连接工作得十分平稳。通常只有少数组合键没有直接传递到远程会话,这取决于连接两端所用的特定窗口管理器。

一个值得注目的 VNC 实现是 Java 版。有许多本机版本可用,即使那些没有本机 vncviewer 的平台也可以使用 Java 版(假定存在用于该平台的 JVM)。VNC-java 可以在 Web 浏览器内运行,Web 浏览器提供了建立连接的常见界面。但是 Java 查看器也可以作为 Java 应用程序在浏览器外部运行。下面的 参考资料提供了一些关于 VNC-java 的额外信息,包括我创建的一个压缩文档,它也许有助于一些用户开始学习。





回页首


下一次

在第 2 部分中,我们将研究远程 X 和其它跨网络运行远程应用程序的方法,还有使用远程应用程序时的安全性问题。



参考资料

SSH 参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • 商业和正式版本的 SSH 是由 SSH Communications Security 推出的。有一个可以免费用于非商业用途的版本,但它不是“自由软件”。

  • 大多数 Linux 分发版封装的却是 OpenSSH 。因为许可证是从各种地方继承的,所以它有一点复杂,但却是“类 BSD”的。

  • 对于 Windows,我建议使用“自由(MIT 许可证)软件”程序 PuTTY 。它很棒并且安装也容易。

  • 对于 BeOS 和 OS/2,我建议在 BeBits.comHobbes OS/2 archive 上分别搜索。对于 MacOS,我使用过 MacSSH,但是关于 Nifty Telnet 1.1 SSH,我无法提出意见。请在 FreeSSH 网站上查看关于 MacOS 的链接。

VNC 参考资料

  • 有些读者可能希望使用 VNCviewer 的 Java 版本,但是在他们的机器上只有 Java 运行时环境,而没有 javac 开发工具。David Mertz 已经创建了(完全未受支持)一套已编译的字节码 .jar.class 文件 ,欢迎您尝试。

其它参考资料



关于作者

David Mertz 的照片

David Mertz 是个讨人喜欢的人。他是计算机问题的克星。可以通过 mertz@gnosis.cx 和 David 联系;可在 http://gnosis.cx/publish/ 上了解他的生活。欢迎提出关于本专栏过去、现在和将来的意见和建议。

posted @ 2008-07-11 23:38 seal 阅读(13) | 评论 (0)编辑 收藏

RedHat Linux AS4远程控制管理配置

1、        安装
2、        配置VNC服务
A、        在安装RedHat AS4操作系统的过程中应该选择安装VNC程序
B、        打开一个中断窗口,输入rpm –q vnc-server命令来检查VNC服务是否安装。如果安装成功,在目录/etc/sysconfig 中有vncserver文件,在目录/usr/bin 中有命令vncserver


1.JPG


C、        置VNC服务,首先启动VNC服务,命令 vncserver
D、        会提示输入密码,这个密码是远程登陆时所需要输入的密码
E、        系统会提示再次确认密码


2.JPG


F、        检测VNC服务 命令ps –eaf (这个命令是检查在当前系统中运行的所有服务)。另外一个针对VNC服务的检测命令是 /etc/init.d/vncserver status 如果VNC服务运行正常,那么会给出提示。


3.JPG


G、        检测端口、测试端口 命令netstat –arp | grep Xvnc


4.JPG


H、        停止VNC服务(终止VNC程序运行),命令vncserver –kill :1   1是表示启动VNC服务时所监听的地址,服务器可以启动不止一个VNC服务,因此必须指定停止那一个
I、        察看VNC运行日志
J、        关于VNC链接后图形界面显示问题的解决。通过以上的配置后,VNC服务正常运行,用户可以通过VNC客户端软件远程登陆LINUX主机,但是由于VNC服务默认的X-Windows是TWM,此时界面比较难看或不能正确显示图形界面,解决办法如下:

运行了 # vncserver后,会在当前用户目录下生成.vnc目录,例如当前用户是root,则会有/root/.vnc/目录,在.vnc目录修改Xstartup文件,更改图形显示参数。
xstartup文件内容是:

#!/bin/sh

# Uncomment the following two lines for normal desktop:
#unset SESSION_MANAGER
#exec /etc/X11/xinit/xinitrc

#[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartupn".
#[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresourcesn".
#xsetroot -solid greyn".
#vncconfig -iconic &n".
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &
               
修改后xstartup文件内容是:
#!/bin/sh

# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

#[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
#[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
#xsetroot -solid grey
#vncconfig -iconic &
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
重新启动vncserver的方法请参考上面的文档。
如果你希望对每个用户生成xstart的时候都是上面这个样子的话,那么可以直接修改vncserer命令了,这是一个perl脚本。
位置在/usr/bin/
修改后的vncserer命令第34行开始为
$defaultXStartup
        = ("#!/bin/sh".
                "# Uncomment the following two lines for normal desktop:".
                "unset SESSION_MANAGER".
                "exec /etc/X11/xinit/xinitrc".
                "#[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup".
                "#[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources".
                "#xsetroot -solid grey".
                "#vncconfig -iconic &".
                "#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &".
                "#twm &");
               
经 过以上配置,就可以通过VNC客户端软件远程管理LINUX服务器了,客户端可以是WINDOWS或者LINUX系统。另外,如果是WINDOWS系统登 陆LINUX系统,那么需要加上IP地址的端口号(监听地址),如我这里的LINUX系统,从WINDOWS XP系统登陆,需要在地址栏输入 192.168.5.212:1
最后需要说明的是VNC服务是基于图形界面的服务,验证简单,因此容易出现安全性问题,因此不要长期启动VNC服务。
3、        配置XDMCP(XManager)
XManager 是一个简单易用的高性能的运行在Windows平台上的X Server软件。它能把远端Unix/Linux的桌面无缝地带到你的Windows上,甚至当你的电脑是在内网或防火墙后,你也能通过SSH协议安全 的运行远端的X应用程序。特点包括: -可通过Xcongfig工具设置多个Xmanager设置; -支持多用户的Windows终端环境; -支持多个IP地址; -支持本地资源数据库; -通过热键转换键盘映射; -支持多窗口下的Windows打印功能等。
如果使用的是gnome
    1、vi /etc/inittab      
    修改 id:5:initdefault:
           x:5:respawn:/usr/bin/gdm
    2、修改/etc/X11/gdm/gdm.conf,找到下面的信息:
    [xdmcp]
    Enable=0 或Enable=false
    修改为:
    [xdmcp]
    Enable=1 或Enable=true
    并确保以下信息存在:
    Port=177
    3、配置iptables打开UDP 177端口,确保/etc/X11/xdm/Xservers的属性为444,/etc/X11/xdm/Xsetup_0的属性为755。
重启机器 ok

如果使用的是kde
1、更改 /etc/X11/xdm/xdm-config .
DisplayManager.requestPort: 0 ==> !DisplayManager.requestPort: 0
此项设置未被注释(最前面没有!字符),如果注释将XDMCP将不侦听,
2、更改 /etc/X11/xdm/Xaccess
#* #any host can get a login window ==> * #any host can get a login window
3、vi /etc/X11/xdm/kdmrc,
/usr/share/config/kdm/kdmrc or
/etc/opt/kde2/share/config/kdm/kdmrc .
更改enable设置为true。
重启机器
               
        如果安装了RedHat AS 4 的话,只需要修改/etc/X11/gdm/gdm.conf文件中的
[xdmcp]
   Enable=true
4、SSH远程管理配置
        SSH是一种基于命令行界面的远程管理模式,无论客户端是什么形式的主机,都可以通过SSH客户端软件远程登陆LINUX、UNIX主机。一般来讲,LINUX、UNIX主机的SSH服务都是自动运行的,SSH的连接方式是很安全的。
        SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺 骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为 FTP、Pop、甚至为PPP提供一个安全的"通道"。
        在RedHat AS4 安装过程中,防火墙配置的步骤中,可以选择是否启用SSH服务,选择启用,在安装完成后,就可以在WINDOWS中直接使用 SSH客户端软件登陆了。这个在以上的三种方法里面是配置最简单、最安全、速度最快的一个,唯一的缺点是没有图形界面,可能会给一部分朋友造成使用上的不 便,不过据说想要成为LINUX或者UNIX高手,就要使用命令行界面,怎样选择,大家见仁见智吧,呵呵。

        以上就是远程控制管理远程LINUX主机的三种办法的安装、配置及使用方法,有兴趣的朋友可以同过andyliu2008@Gmail.com进行交流,热烈欢迎!!!

附组图1——VNC
1、VNC客户端启动界面


5.JPG


2、登陆服务器


6.JPG


3、VNC运行期界面


7.JPG


附组图2——XManager
1、XManager启动


8.JPG


2、XManager登陆(XManager可以自动监测到网络内的LINUX或UNIX主机,以列表形式展现)


9.JPG


3、通过XManager登陆LINUX


9-2.JPG


4、成功登陆REDHAT LINUX AS4


10.JPG


附组图3——SSH
1、启动SSH客户端


11.JPG


2、输入远程主机密码


12.JPG


3、登陆LINUX主机


13.JPG

posted @ 2008-07-11 15:32 seal 阅读(33) | 评论 (0)编辑 收藏

Ubuntu自带的FTP服务器是vsftpd,好文推荐里也转了两篇这方面的内容,本人通过实践再奉献一篇,呵呵

1)安装vsftpd

Ubuntu安装软件倒不是件困难的事,输入:

sudo apt-get install vsftpd

可能会提示你使用光盘,放进去再按回车就行了。

安装了之后会在/home/下建立一个ftp目录。这时候你可以试着访问下ftp://IP地址。应该可以看到一个空白内容的ftp空间。

默认设置下匿名用户可以下载,但不能写入或是上传



2)设置 vsftpd.conf文件

现在我们要让匿名用户无法访问,并且得输入linux上的用户密码后才能访问到他们自己目录里的内容。

首先找到设置vsftpd的文件,位置在/etc/vsftpd.conf

修改之前最好先备份下这个文件:

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.old

然后可以改动了:

#不让匿名用户使用
#anonymous_enable=YES

#本地用户可用
local_enable=YES

#可用写操作
write_enable=YES

#不需要显示某目录下文件信息
#dirmessage_enable=YES

#加点banner提示
ftpd_banner=Hello~~

#FTP服务器最大承载用户
max_clients=100

#限制每个IP的进程
max_per_ip=5

#最大传输速率(b/s)
local_max_rate=256000

#隐藏帐号
hide_ids=YES

好了,重启下ftp 服务器看看效果

重启后还是和原来一样对吗?呵呵,这是默认的ftp目录在做鬼,我们把它删除,再看看。怎么样?要你输入用户名和密码了吧。

新的问题

1.输入用户名密码后显示的位置是在用户的根目录下,而我们的WEB内容是在public_html目录里

2.用户可以跳到任何其他目录(非常危险..)

要解决这些问题我们还得设置下vsftpd.conf

#启动chroot列表(Change root)
chroot_list_enable=YES

#指定列表位置(我这用的是默认地址)
chroot_list_file=/etc/vsftpd.chroot_list

接下来我们得在vsftpd.chroot_list上写进去我们要限制哪些用户,不让他们“漂移”..

现在有用户linyupark,所以只要sudo nano一下,往里面写就行了

这样我们已经解决第2个问题了,登陆的用户只能在它的用户文件夹里活动,下面我们要更狠一点,让他只能在public_html里活动

依然还是找vsftpd.conf

#这句默认设置里是没有的,自己加
user_config_dir=/etc/自己定义一个设置个别用户用的文件夹地址

根据自己设置的地址,建立一个相应的文件夹,然后往里面建立和用户名相同的文件,nano一下:

#本地用户的根地址,假设用户是linyupark
local_root=/home/linyupark/public_html

好咯,重启下服务器。看看效果吧^_^

posted @ 2008-07-11 11:55 seal 阅读(19) | 评论 (0)编辑 收藏