使用 SSH 建立安全通信信道

在安全的环境中建立从 Windows 到 UNIX 的连接

使用各种开放源码的工具,如安全 Shell (SSH)、PuTTY 和 Cygwin,对几乎任何需要访问的资源创建安全的连接。目前,有关 SSH 隧道建立和设置的信息并不是很完整,而且局限于特定的应用程序,或者编写于系统管理员的级别。随着安全需求的日益增长,除了添加边界防火墙、严格控制允许的网络端口的数目,用户还需要一种简单地进行配置、操作的方法,最重要的是,安全地完成日常的任务以及访问那些他们经常访问的服务。

在日常工作中,我发现许多用户因为网络管理人员实施的新的安全规则而倍受挫折。尽管用户能够理解附加安全性的需要,但这些限制却成为提高工作效率的重要瓶颈。虽然这些用户懂得相关技术,但网络服务设置和防火墙可能并不属于他们的知识库中的一部分。

本文描述了对连接到基于 AIX® 或 Linux® 的 SSH 服务器的简单 SSH 客户端的设置,这种服务器为典型的、懂得技术的用户提供了设置、配置和操作的能力,以便通过一种灵活的方式在 SSH 服务的基础上实现数据和服务的隧道化。用户将获益于对其环境的控制以及适应日常需求的能力。管理员将获益于减少用户打开端口的请求,从而能够对其安全环境进行更严格的控制。

James E. Shewbert (shewbert@us.ibm.com), 高级软件工程师, IBM

James Shewbert 于 2002 年在 Texas Tech University 获得了信息系统 MSBA,随后便加入了 IBM。从那时开始,他就成为了 Global TIM Competency 项目的测试人员和自动化技术负责人,包括 ManageNow/eESM 套件。他还是一名 Sun 认证 Java 2 环境程序员。



2007 年 6 月 29 日

引言

每天都会出现新的安全威胁,而网络管理人员则成为了其计算资产的保护者。然而,增强的安全措施可能给合法的用户带来显著的困难,并可能导致用户遭受挫折、生产效率降低以及绕过安全限制的危险的攻击。使用合适的工具进行连接,可以在维护网络安全性和完整性的同时,使您的任务变得更加简单。IT 工具包中最有价值的工具之一是安全 Shell (SSH)。大多数用户都知道可以使用 SSH 作为 Telnet 的替代程序,但许多人并不了解它其他的优点。在经过正确的配置之后,服务器和客户端可以使用 SSH 建立连接,并与几乎任何服务进行通信。并且,因为 SSH 天生比 Telnet、FTP 或其他非加密的协议更加安全,所以大多数网络管理人员都可以接受打开端口的请求,并允许 SSH 通信通过防火墙。下面是关于这些技术的摘要,我曾用它来建立通过防火墙的连接,既有效又安全。

设置 SSH 客户端

在开始学习之前,您需要:

  • 确保有一台 Windows® 主机(称为 SSH 客户端)和 SSH 客户端软件(如 PuTTY)。
  • 一台 SSH 服务器(称为 SSH 服务器),通常放置在受防火墙保护的网络区域中,这种服务器通常基于 AIX®、Linux® 或其他的 UNIX® 变种,但也可以使用基于 Windows 的 SSH 服务器。
  • 其他的服务器进程(Server Message Block (SMB)、Virtual Network Computing (VNC),等等)。

设置 SSH 服务器

目前大多数 UNIX 操作系统的分发版都包括 OpenSSH 软件的某个变种。如果您的分发版中没有附带该软件,您可以查看 OpenSSH 站点(请参见参考资料部分)以获取二进制代码或源代码。在大多数情况下,安装服务器与安装 Redhat Package Manager (RPM) 并验证配置设置同样简单。确切的安装方法可能根据您所使用的环境的特点而有所不同。在实际情况下,大多数现代的 UNIX 系统缺省都安装了 OpenSSH。

考虑到其普及性,下面的描述使用免费的 SSH 客户端 PuTTY 作为参考。然而,所给出的配置是相对通用的,所以用户可以根据自己的需要来选择客户端软件。上述的配置步骤假定您熟悉基本的 SSH 连接,并提供了关于建立到隧道服务的连接的细节信息。

图 1 描述了通过 SSH 隧道对基础的 VNC 连接进行转发的基本概念。

图 1. 通过 SSH 隧道对基础的 VNC 连接进行转发
通过 SSH 隧道对基础的 VNC 连接进行转发

配置

  1. 请确保在将要连接到远程服务器的本地端口上没有运行任何服务。在后续的步骤中,您将使用 SSH 客户端在本地客户端上定义一个虚拟服务,该服务对应于要连接到的远程系统中的服务;因此,对应于远程端口的本地端口必须可用。例如,如果您试图使用隧道访问远程系统中的 SMB 共享,那么必须为本地系统的 Microsoft® 网络禁用 File and Printer Sharing。与之类似,如果您打算在远程主机上附加一个 VNC 服务器,则必须确保如果有任何 VNC 服务器会话运行于本地系统,它们不能与要连接的远程系统中的 VNC 服务器运行于相同的端口。
  2. 在客户端工作站上,创建一个标准的 SSH 连接概要以连接到远程主机。下面的示例假定您使用的是免费的 PuTTY SSH 客户端,然而无论选择哪一种客户端,基本原则都是相同的。

命令行或 Linux 客户端用户的替代用法

喜欢使用其他客户端(如 OpenSSH)的用户,或使用其他基于 IX 的客户端的用户,可以使用下面的命令行实现与图 2 中描述的 PuTTY 配置相同的效果:
ssh -L 5900:localhost:5900 Server1_host_name

图 2. 替代 PuTTY 配置
替代 PuTTY 配置
  1. 在上面的图 2 中输入相关信息,然后,请确保从 Category tree 中选择 Session 项目,并保存该会话以供将来使用。
  2. 在客户端工作站上,打开上面创建的会话。在客户端和服务器之间第一次建立连接的时候,将提示您确认将服务器的密钥添加到您的本地密钥存储库。在检查并接受了远程服务器密钥之后,请为远程服务器提供 user IDpassword。当您收到来自远程系统的命令提示符时,您的 SSH 连接和隧道已经就绪并可以使用了。
  3. 在客户端工作站中,启动 VNC Viewer 软件并在 VNC 服务器字段中输入 localhost:5900,如下面的图 3 所示,然后单击 Connect。根据所使用的 VNC 版本的不同,连接窗口的外观也会有所不同,然而,基本原则都是相同的。
    图 3. VNC 选项
    VNC 选项
  4. 稍后,您将可以看到 VNC 窗口。现在,这些系统通过 SSH 连接实现了 VNC 会话。

高级主题

在建立了上述基本连接之后,您可以重复该模式为那些可以标识端口配置的任何服务建立隧道。另外,可以将转发配置为使用单个连接访问安全区域中的多个服务和附加的服务器。在下面的示例中,SSH 客户端连接到 SSH 服务器,与前面的示例完全一样。另外,SSH 客户端配置将附加端口 (139) 转发到另一台远程服务器。请注意,远程服务器无需任何特殊的配置或软件以使该配置生效,并且该配置独立于操作系统:SSH 功能仅用作通信的管道。对前面示例中的 SSH 服务器配置描述如下,其中新的配置项目用蓝色表示。这样可以允许客户端通过使用单个安全端口同时访问多个服务器和服务。图 4 演示了如何使用这样的连接。

图 4. SSH 服务器配置
SSH 服务器配置

下面是两个更常用的端口:

  • Windows 文件共享:139
  • Windows 远程桌面协议:3389

这并不是一份详尽的列表,正如前面提到的,大多数可标识端口的网络服务都可以通过这种方式进行转发。

配置

  1. 按照前面部分中的步骤,在 PuTTY 配置窗口中添加一个附加转发端口,如下所述。图 5 显示了 Windows 文件共享的隧道定义。
    图 5. Windows 文件共享
    Windows 文件共享
  2. 在定义了隧道并保存了概要之后,打开 SSH 会话并登录到服务器 1。
  3. 在本地 Windows 客户端中,打开一个 Windows Explorer 会话并输入 \\localhost\sharename_on_Server2,然后按 Enter
  4. 几秒钟之后,您将收到输入密码的提示,请求到远程共享的登录凭据。为服务器 2 上的共享输入 usernamepassword
  5. 在几秒钟之后,这个窗口将会刷新并显示该共享中的文件清单。

X11 转发

SSH 更深奥的用途之一是 X11 转发,它允许在 SSH 客户端上显示应用程序的图形部分,而程序逻辑依然在远程服务器上执行。通过使用这种方法,用户可以避免通过连接转发整个桌面带来的网络开销,并且仅接收到有关显示部分的内容。图 6 描述了 X11 转发的基本场景。

图 6. X11 转发
X11 转发

您需要的是:

  • 一台 Windows 主机(称为 SSH 客户端)X 服务器和 SSH 客户端(如 Cygwin-X
  • 一台 SSH 服务器(称为 SSH 服务器),安装了 SSH 服务器软件并运行(*IX:OpenSSH)
  • 任何图形服务器应用程序

配置

要在本地 Windows 工作站上配置一台 X 服务器,可以使用 Cygwin 的安装程序。在缺省的安装中,安装了 Cygwin-X 包。在完成缺省安装之后,执行下面的步骤,以便将 GUI 显示部分转发到您的本地系统。

  1. 在远程 SSH 服务器上,找到 sshd_config 文件。通常,该文件位于 /etc/ssh/,但这个位置可能根据您具体的操作系统或分发版而有所不同。
  2. 编辑 sshd_config 并找到包含 X11Forwarding 的行,与下面的示例所示类似:
    .
    .
    #AllowTcpForwarding yes
    #GatewayPorts no
    X11Forwarding yes
    #X11DisplayOffset 10
    #X11UseLocalhost yes
    #PrintMotd yes
    .
    .

    在结束编辑时,请确保该行的内容与上面的示例相同。该行内容前面不应该有注释标记 (#),并且其值应该设置为 Yes。如果需要对 sshd_config 文件进行修改,那么您必须重新启动 SSH 子系统。
  3. 在本地 SSH 客户端中,找到 ssh_config 文件。在配置了 CygwinX 的系统中,该文件通常位于 /cygdrive/c/cygwin/etc/。
  4. 编辑 ssh_config 并找到下面的行:
    .
    .
    #Host *
    #ForwardAgent no
     ForwardX11 yes 
    #RhostsRSAAuthentication no
    #RSAAuthentication yes
    .
    .

    在结束编辑时,请确保该行的内容与上面的示例相同。该行内容前面不应该有注释标记 (#),并且其值应该设置为 Yes。如果需要对 sshd_config 文件进行修改,那么您必须重新启动任何活动的 SSH 会话,以使更改生效。
  5. 在本地 SSH 客户端中,通过执行 <cygwin home>\usr\X11R6\bin\startxwin.bat 启动 X 服务器。稍后将会显示一个命令 Shell 窗口。
  6. 在本地 SSH 客户端中,通过执行 <cygwin home>\usr\X11R6\bin\startxwin.bat 启动 X 服务器。稍后将会显示一个命令 Shell 窗口。
  7. 在成功地登录并获得对远程计算机的访问权之后,您可以执行带有图形组件的任何应用程序,并且程序的图形部分将显示到 SSH 客户端的显示器上。要快速验证是否正确地建立了连接,可以输入 xclock 以启动标准的 X Window 时钟实用程序。您应该马上可以看到出现了一个带模拟时钟外观的窗口,如图 7 所示。
    图 7. xclock 和 DB2® Control Center
    在这个示例中,xclock 和 DB2 Control Center 窗口都出现在 Windows 桌面上。

结束语

尽管无法完全消除增加的安全措施所带来的不便之处,但您可以降低它们对工作效率的影响。通过使用通常可获得的或开放源码的工具,如 SSH、PuTTY 和 Cygwin,用户可以对几乎任何需要访问的资源创建简单的、安全的连接。通过鼓励使用上面所描述的技术,网络管理人员可以在允许用户对其日常活动进行更高级别的控制的同时,确保用户遵守各种安全要求。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX, Linux
ArticleID=237606
ArticleTitle=使用 SSH 建立安全通信信道
publish-date=06292007