Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

12.4. 更多安全 Shell

安全命令行界面只是可以使用 SSH 的许多方式的开头。鉴于适当的带宽量,X11 会话可以通过 SSH 通道进行定向。或者,通过使用 TCP/IP 转发,系统之间的之前不安全的端口连接可以映射到特定的 SSH 频道。

12.4.1. X11 转发

要通过 SSH 连接打开 X11 会话,请使用以下格式的命令:

ssh -Y username@hostname

例如,使用用户名 USER 登录名为 penguin .example.com 的远程机器,请输入:

~]$ ssh -Y USER@penguin.example.com
USER@penguin.example.com's password:

当从安全 shell 提示符运行 X 程序时,SSH 客户端和服务器会创建一个新的安全频道,并且 X 程序数据通过该通道以透明方式发送到客户端计算机。

请注意,在进行 X11 转发前,必须在远程系统上安装 X Window 系统。以 root 用户身份输入以下命令安装 X11 软件包组:

~]# yum group install "X Window System"

有关软件包组的详情请参考 第 9.3 节 “使用软件包组”

X11 转发非常有用。例如,可以使用 X11 转发来创建 Print Settings 实用程序的安全、交互式会话。要做到这一点,使用 ssh 连接到服务器并键入:

~]$ system-config-printer &

这时将显示 "打印设置" 工具,使远程用户能够安全地在远程系统上配置打印。

12.4.2. 端口转发

SSH 可以通过端口转发保护不安全的 TCP/IP 协议。使用这种技术时,SSH 服务器会变为 SSH 客户端的加密通道。

通过将客户端上的本地端口映射到服务器上的远程端口,端口转发发挥作用。SSH 可以将服务器中的任何端口映射到客户端上的任何端口。端口号不需要与此技术匹配。

注意

将端口转发设置为侦听低于 1024 的端口需要 root 级别访问权限。

要创建一个侦听 本地主机 上连接的 TCP/IP 端口转发频道,请使用以下格式的命令:

ssh -L local-port:remote-hostname:remote-port username@hostname

例如,要通过 加密连接检查名为 mail.example.com 的服务器上的电子邮件,请使用以下命令:

~]$ ssh -L 1100:mail.example.com:110 mail.example.com

在客户端机器和邮件服务器之间进行端口转发通道后,请指示 POP3 邮件客户端使用 本地主机 上的端口 1100 检查新电子邮件。发送到客户端系统上端口 1100 的任何请求将安全定向到 mail.example.com 服务器。

如果 mail.example.com 没有运行 SSH 服务器,但是同一网络上的另一台计算机为,那么仍可以使用 SSH 来保护连接的一部分。但是,需要一个略有不同的命令:

~]$ ssh -L 1100:mail.example.com:110 other.example.com

在本例中,来自客户端计算机上端口 1100 的 POP3 请求将通过端口 22 上的 SSH 连接转发到 SSH 服务器 other.example.com。然后,other.example.com 连接到 mail.example.com 上的端口 110 以检查新电子邮件。请注意,使用这种技术时,只有客户端系统与 other.example.com SSH 服务器之间的连接是安全的。

OpenSSH 套件还提供 UNIX 域套接字的本地和远程端口转发。要将 UNIX 域套接字通过网络转发到另一台机器,请使用 ssh -L local-socket:remote-socket username@hostname 命令,例如:

~]$ ssh -L /var/mysql/mysql.sock:/var/mysql/mysql.sock username@hostname

端口转发还可用于通过网络防火墙安全地获取信息。如果防火墙配置为允许 SSH 流量通过其标准端口(即端口 22)访问,但阻止对其他端口的访问,则使用受阻端口的两个主机之间的连接仍可通过通过已建立的 SSH 连接重定向来进行。

重要

以这种方式使用端口转发转发连接可让客户端系统上的任何用户连接到该服务。如果客户端系统被破坏,攻击者也有权访问转发的服务。

关注端口转发的系统管理员可以通过为 /etc/ssh/sshd_config 中的 AllowTcpForwarding 行指定 No 参数来禁用此功能,然后重新启动 sshd 服务。