10.4. 应用程序的远程执行

10.4.1. 简介

有几种不同的方法可以在远程机器上执行命令或运行程序,并将输出(无论是文本还是图形)发送到您的工作站。连接可以是安全的或不安全的。虽然当然建议使用安全连接而不是通过未加密的网络传输密码,但我们将讨论一些较旧(不安全)机制的实际应用,因为它们在现代网络环境中仍然有用,例如用于故障排除或运行特殊程序。

10.4.2. Rsh、rlogin 和 telnet

用于远程登录和远程执行命令的 rloginrsh 命令继承自 UNIX。虽然由于它们明显不安全而很少使用,但为了向后兼容 UNIX 程序,几乎每个 Linux 发行版仍然都附带它们。

另一方面,Telnet 仍然常用,通常由系统和网络管理员使用。Telnet 是远程访问文件和远程管理的最强大工具之一,允许从 Internet 上的任何位置进行连接。与 X 服务器结合使用,远程图形应用程序可以在本地显示。在本地机器上工作和使用远程机器之间没有区别。

由于整个连接都是未加密的,因此允许 telnet 连接会带来很高的安全风险。对于程序的正常远程执行,建议使用 Secure SHellssh。我们将在本节稍后讨论安全方法。

但是,telnet 在许多情况下仍然使用。以下是一些示例,其中测试邮件服务器和 Web 服务器的回复

检查邮件服务器是否工作

[jimmy@blob ~] telnet mailserver 25
Trying 192.168.42.1...
Connected to mailserver.
Escape character is '^]'.
220 m1.some.net ESMTP Sendmail 8.11.6/8.11.6; 200302281626
ehlo some.net
250-m1.some.net Hello blob.some.net [10.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-SIZE
250-DSN
250-ONEX
250-ETRN
250-XUSR
250 HELP
mail from: jimmy@some.net
250 2.1.0 jimmy@some.net... Sender ok
rcpt to: davy@some.net
250 2.1.5 davy@some.net... Recipient ok
data
354 Enter mail, end with "." on a line by itself
test
.
250 2.0.0 g2MA1R619237 Message accepted for delivery
quit
221 2.0.0 m1.some.net closing connection
Connection closed by foreign host.

检查 Web 服务器是否响应基本请求

[jimmy@blob ~] telnet www.some.net 80
Trying 64.39.151.23...
Connected to www.some.net.
Escape character is '^]'.
HEAD / ;HTTP/1.1

HTTP/1.1 200 OK
Date: Fri, 22 Mar 2002 10:05:14 GMT
Server: Apache/1.3.22 (UNIX) (Red-Hat/Linux) 
 mod_ssl/2.8.5 OpenSSL/0.9.6
 DAV/1.0.2 PHP/4.0.6 mod_perl/1.24_01
Last-Modified: Fri, 04 Jan 2002 08:21:00 GMT
ETag: "70061-68-3c3565ec"
Accept-Ranges: bytes
Content-Length: 104
Connection: close
Content-Type: text/html

Connection closed by foreign host.

[jimmy@blob ~]

这是完全安全的,因为您永远不必提供用户名和/或密码来获取您想要的数据,因此没有人可以从电缆上窃取重要的信息。

10.4.3. X Window 系统

10.4.3.1. X 功能

正如我们在第 7 章(参见 7.3.3 节)中已经解释的那样,X Window 系统带有一个 X 服务器,该服务器为需要显示器的客户端提供图形服务。

重要的是要认识到 X 服务器和 X 客户端应用程序之间的区别。X 服务器直接控制显示,并负责通过键盘、鼠标和显示器的所有输入和输出。另一方面,X 客户端不直接访问输入和输出设备。它与处理输入和输出的 X 服务器通信。正是 X 客户端完成了实际工作,例如计算值、运行应用程序等等。X 服务器仅打开窗口来处理指定客户端的输入和输出。

在正常操作(图形模式)中,每个 Linux 工作站本身都是一个 X 服务器,即使它只运行客户端应用程序。您正在运行的所有应用程序(例如,Gimp、终端窗口、浏览器、办公应用程序、CD 播放工具等等)都是您的 X 服务器的客户端。在这种情况下,服务器和客户端在同一台机器上运行。

X 系统的这种客户端/服务器性质使其成为远程执行应用程序和程序的理想环境。由于该进程实际上是在远程机器上执行的,因此本地主机上只需要很少的 CPU 功率。这种纯粹充当 X 服务器的机器称为 X 终端,曾经非常流行。《Remote X applications mini-HOWTO》中可以找到更多信息。

10.4.3.2. Telnet 和 X

如果您想使用 telnet 显示在远程机器上运行的图形应用程序,您首先需要使用 xhost 命令授予远程机器访问您的显示器(您的 X 服务器!)的权限,方法是在本地机器的终端窗口中键入类似于下面的命令

davy:~> xhost +remote.machine.com

之后,连接到远程主机,并通过设置环境变量告诉它在本地机器上显示图形DISPLAY:

[davy@remote ~] export DISPLAY="local.host.com:0.0"

完成此步骤后,在此终端窗口中启动的任何应用程序都将显示在您的本地桌面上,使用远程资源进行计算,但使用您的本地图形资源(您的 X 服务器)来显示应用程序。

此过程假定您已经在要显示图像的机器上设置了某种 X 服务器(XFree86X.orgExceedCygwin)。客户端机器的架构和操作系统并不重要,只要它们允许您在其上运行 X 服务器即可。

请注意,从远程机器显示终端窗口也被认为是图像的显示。

10.4.4. SSH 套件

10.4.4.1. 简介

大多数 UNIX 和 Linux 系统现在运行 Secure SHell,以消除 telnet 带来的安全风险。大多数 Linux 系统将运行 OpenSSH 的版本,OpenSSH 是 SSH 协议的开源实现,可在不受信任的网络上的不受信任的主机之间提供安全的加密通信。在标准设置中,X 连接会自动转发,但也可以使用安全通道转发任意 TCP/IP 端口。

ssh 客户端连接并登录到指定的主机名。用户必须按照以下文件中的规定向远程机器提供其身份sshd_config文件,通常可以在以下位置找到/etc/ssh。配置文件相当不言自明,默认情况下启用大多数常用功能。如果您需要帮助,可以在 sshd 手册页中找到它。

当服务器接受用户的身份后,服务器要么执行给定的命令,要么登录到机器并在远程机器上为用户提供一个普通的 shell。与远程命令或 shell 的所有通信都将自动加密。

当远程机器上的命令或 shell 退出并且所有 X11 和 TCP/IP 连接都已关闭时,会话终止。

首次连接到主机时,使用 SSH 集合中包含的任何程序,您需要建立该主机的真实性并确认您要连接

lenny ~> ssh blob
The authenticity of host 'blob (10.0.0.1)' can't be established.
RSA fingerprint is 18:30:50:46:ac:98:3c:93:1a:56:35:09:8d:97:e3:1d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'blob,192.168.30.2' (RSA) to the list of 
known hosts.
Last login: Sat Dec 28 13:29:19 2002 from octarine
This space for rent.

lenny is in ~

重要的是您输入 "yes",三个字符,而不仅仅是 "y"。这将编辑您的~/.ssh/known_hosts文件,请参阅 10.4.4.3 节

如果您只想在远程机器上检查某些内容,然后在本地主机上返回提示符,您可以将要远程执行的命令作为 ssh 的参数给出

lenny ~> ssh blob who
jenny@blob's password:
root     tty2         Jul 24 07:19
lena	 tty3         Jul 23 22:24
lena     0:	      Jul 25 22:03

lenny ~> uname -n
magrat.example.com

10.4.4.2. X11 和 TCP 转发

如果X11Forwarding条目在目标机器上设置为 yes 并且用户正在使用 X 应用程序,则DISPLAY环境变量已设置,到 X11 显示器的连接会自动转发到远程端,这样从 shell 启动的任何 X11 程序都将通过加密通道,并且到真实 X 服务器的连接将从本地机器建立。用户不应手动设置DISPLAY。X11 连接的转发可以在命令行或 sshd 配置文件中配置。

的值为DISPLAYssh 设置将指向服务器机器,但显示编号大于零。这是正常的,发生这种情况是因为 ssh 在服务器机器(运行 X 客户端应用程序)上创建了一个代理 X 服务器,用于通过加密通道转发连接。

这一切都是自动完成的,因此当您键入图形应用程序的名称时,它会显示在您的本地机器上,而不是在远程主机上。我们在示例中使用 xclock,因为它是一个通常安装的小程序,非常适合测试

图 10-3。SSH X11 转发

SSH 还将自动在服务器机器上设置 Xauthority 数据。为此,它将生成一个随机授权 cookie,并将其存储在Xauthority在服务器上,并验证任何转发的连接是否都带有此 cookie,并在连接打开时将其替换为真实的 cookie。真实的身份验证 cookie 永远不会发送到服务器机器(并且没有 cookie 以明文形式发送)。

通过安全通道转发任意 TCP/IP 连接可以在命令行或配置文件中指定。

NoteX 服务器
 

此过程假定您在要显示来自远程主机的应用程序的客户端上运行了 X 服务器。客户端的架构和操作系统可能与远程主机不同,只要它可以运行 X 服务器,例如 Cygwin(为 MS Windows 客户端和其他客户端实现 X.org 服务器)或 Exceed,就应该可以与任何 Linux 或 UNIX 机器建立远程连接。

10.4.4.3. 服务器身份验证

ssh 客户端/服务器系统自动维护和检查一个数据库,其中包含与其曾经使用过的所有主机的标识。主机密钥存储在$HOME/.ssh/known_hosts在用户的主目录中。此外,文件/etc/ssh/ssh_known_hosts会自动检查已知主机。任何新主机都会自动添加到用户的文件中。如果主机的标识发生更改,ssh 会对此发出警告并禁用密码身份验证,以防止特洛伊木马获取用户的密码。此机制的另一个目的是防止中间人攻击,否则可能被用来规避加密。在需要高安全性的环境中,甚至可以将 sshd 配置为阻止登录到主机密钥已更改或未知的机器。

10.4.4.4. 安全远程复制

SSH 套件提供 scp 作为 rcp 命令的安全替代方案,该命令在只有 rsh 存在时曾经很流行。scp 使用 ssh 进行数据传输,使用相同的身份验证并提供与 ssh 相同的安全性。与 rcp 不同,如果需要身份验证,scp 将询问密码或密码短语

lenny /var/tmp> scp Schedule.sdc.gz blob:/var/tmp/
lenny@blob's password:
Schedule.sdc.gz  100% |*****************************| 100 KB 00:00

lenny /var/tmp>

任何文件名都可以包含主机和用户规范,以指示该文件要复制到/从该主机复制。允许在两个远程主机之间进行复制。有关更多信息,请参阅 Info 页面。

如果您更喜欢使用类似 FTP 的界面,请使用 sftp

lenny /var/tmp> sftp blob
Connecting to blob...
lenny@blob's password:

sftp> cd /var/tmp

sftp> get Sch*
Fetching /var/tmp/Schedule.sdc.gz to Schedule.sdc.gz

sftp> bye

lenny /var/tmp>

Note安全复制或 FTP GUI
 

还不习惯命令行?尝试 Konqueror 的安全远程复制功能,或安装 Putty

10.4.4.5. 身份验证密钥

ssh-keygen 命令为 ssh 生成、管理和转换身份验证密钥。它可以创建用于 SSH 协议版本 1 的 RSA 密钥和用于 SSH 协议版本 2 的 RSA 或 DSA 密钥。

通常,每个希望将 SSH 与 RSA 或 DSA 身份验证结合使用的用户都运行此命令一次,以在以下位置创建身份验证密钥$HOME/.ssh/identity, id_dsaid_rsa。此外,系统管理员可以使用它为系统生成主机密钥。

通常,此程序生成密钥并询问用于存储私钥的文件。公钥存储在具有相同名称但附加 .pub 的文件中。该程序还会询问密码短语。密码短语可以为空以指示没有密码短语(主机密钥必须具有空的密码短语),也可以是任意长度的字符串。

没有办法恢复丢失的密码短语。如果密码短语丢失或忘记,则必须生成新密钥并将其复制到相应的公钥。

我们将在练习中研究 SSH 密钥。所有信息都可以在 man 或 Info 页面中找到。

10.4.5. VNC

VNC 或 Virtual Network Computing 实际上是一个远程显示系统,它不仅允许在运行它的本地机器上查看桌面环境,还可以从 Internet 上的任何位置以及各种机器和架构(包括 MS Windows 和几个 UNIX 发行版)查看桌面环境。例如,您可以在 Windows NT 机器上运行 MS Word,并在 Linux 桌面上显示输出。VNC 提供服务器和客户端,因此反之亦然,因此它可用于在 Windows 客户端上显示 Linux 程序。VNC 可能是 PC 上建立 X 连接的最简单方法。以下功能使 VNC 与普通 X 服务器或商业实现不同

更多信息可以在 VNC 客户端手册页 (man vncviewer) 或 VNC 网站上找到。

10.4.6. rdesktop 协议

为了简化 MS Windows 主机的管理,最新的 Linux 发行版支持远程桌面协议 (RDP),该协议在 rdesktop 客户端中实现。该协议用于许多 Microsoft 产品,包括 Windows NT 终端服务器、Windows 2000 Server、Windows XP 和 Windows 2003 Server。

全屏模式、多种类型的键盘布局和单应用程序模式,就像真实的一样,让您的朋友(或管理层)感到惊喜。《man rdesktop》手册提供了更多信息。该项目的首页位于 http://www.rdesktop.org/

10.4.7. Cygwin

Cygwin 在 MS Windows 系统上提供了大量的 UNIX 功能。除了提供 UNIX 命令行工具和图形应用程序外,它还可以用于在使用远程 X 的 MS Windows 机器上显示 Linux 桌面。从 Cygwin Bash shell 中,键入命令

/usr/X11R6/bin/XWin.exe-query your_linux_machine_name_or_IP

默认情况下,连接被拒绝。您需要更改 X Display Manager (XDM) 配置以及可能的 X Font Server (XFS) 配置以启用这种类型的连接,您可以在远程机器上获得登录屏幕。根据您的桌面管理器(GnomeKDE、其他),您可能也必须在那里更改一些配置。

如果您不需要显示整个桌面,您可以在 Cygwin 中使用 SSH,就像 10.4.4 节中解释的那样。无需编辑配置文件的所有麻烦。