使用 OpenSSH 为运行远程终端提供安全环境。OpenSSH 和终端的基本用法非常简单,不过,本文还将介绍允许自动登录到远程主机的其他元素、运行远程应用程序的方法,以及如何在主机之间安全地复制文件。
关于本系列
典型的 UNIX® 管理员拥有一套经常用于辅助管理过程的关键实用工具、诀窍和系统。存在各种用于简化不同过程的关键实用工具、命令行链和脚本。其中一些工具来自于操作系统,而大部分的诀窍则来源于长期的经验积累和减轻系统管理员工作压力的要求。本系列文章主要专注于最大限度地利用各种 UNIX 环境中可用的工具,包括简化异构环境中的管理任务的方法。
为何使用 OpenSSH?
您每天使用的标准网络服务(如 FTP、Telnet、RCP 和远程 Shell (rsh) 等)在封闭环境中运行良好,但使用这些服务在网络上传输的信息是未加密的。任何人都可以在您的网络或远程计算机上使用包嗅探器查看交换的信息,有时甚至可以查看密码信息。
而且,使用所有此类服务时,在登录过程中用于自动登录的选项会受到限制,并且通常依赖于将纯文本密码嵌入到命令行才能执行语句,从而使登录过程变得更加不安全。
开发的安全 Shell (SSH) 协议可以排除这些限制。SSH 能够为整个通信通道提供加密,其中包括登录和密码凭据交换,它与公钥和私钥一起使用可以为登录提供自动化身份验证。您还可以将 SSH 用作基础传输协议。以这种方式使用 SSH 意味着在打开安全连接后,加密通道可以交换所有类型的信息,甚至 HTTP 和 SMTP 可以使用该方法来保证通信机制的安全。
OpenSSH 是 SSH 1 和 SSH 2 协议的免费实现。它最初是作为 OpenBSD (Berkeley Software Distribution) 操作系统的一部分开发的,现在被发布为 UNIX 或 Linux® 和类似操作系统的常规解决方案。
安装 OpenSSH
OpenSSH 是免费软件,可以从 OpenSSH 的主要网站下载(请参见参考资料)。可以使用多种系统(包括 Linux、HP-UX、AIX®、Solaris、Mac OS X 等)上的源代码构建 OpenSSH 系统。通常可以找到所选平台和版本的预编译二进制代码。有些供应商甚至作为操作系统的一部分提供 OpenSSH 工具包。
要构建OpenSSH,您需要以下内容:
C 编译器(GNU C 编译器 (gcc) 或类似编译器)
Zlib – 压缩库
OpenSSL – 安全套接字层 (SSL) 安全库
如果您需要使用缺省配置设置,请使用常规构建序列,如下面的清单 1 所示。
清单 1. 使用常规构建序列
$ ./configure
$ make
$ make install
这会将二进制文件、库文件和配置文件安装到 /usr/local 目录中,例如,二进制文件安装到 /usr/local/bin,配置文件安装到 /usr/local/etc。如果希望将各种工具集成到主环境中,那么您可能需要指定设置基本目录的 --prefix 选项和设置配置文件位置的 --sysconfdir 选项:
$ ./configure --prefix=/usr --sysconfidir=/etc/ssh
您可能指定的一些其他常规选项包括:
--with-tcp-wrappers——如果您希望与 TCP 包装安全系统集成在一起,则此选项是必需的。
--with-ssl-dir=DIR——此选项指定 OpenSSL 库的位置。
--with-pid-dir=DIR——此选项指定 PID 文件的位置,该文件为 sshd 守护进程存储进程 ID。
--with-xauth=DIR——此选项指定用于 X 身份验证的 xauth 命令的位置。
完成配置后,使用 make 以正常方式构建。
构建和安装过程完成后,您需要配置系统,先创建唯一标识系统的 SSH 密钥,然后启用客户机和主机之间的安全通信。您可以运行:
$ make host-key
或者,您可以在命令行上手动执行各个步骤。您需要创建三个密钥(每个密钥对应于一个主要加密算法:rsa1、rsa 和 dsa)。例如,清单 2 显示了如何创建 rsa1 密钥。
清单 2. 创建 rsa1 密钥
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key
Generating public/private rsa1 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /etc/ssh//ssh_host_key.
Your public key has been saved in /etc/ssh//ssh_host_key.pub.
The key fingerprint is:
43:aa:58:3c:d8:30:de:43:af:66:2a:b2:8d:02:08:86 root@remotehost
系统提示您输入密码。对于主机密钥,您可能不需要密钥密码,所以您可以按 Return 使用空密码。或者,您可以在命令行上使用 -N 选项加速该过程(请参见清单 3)。
清单 3. 使用 -N 选项加速过程
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N ""
Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
a3:e3:21:4f:b5:9f:ff:05:46:66:bc:36:a1:47:a0:64 root@remotehost
现在重复该过程,以创建 rsa 和 dsa 密钥(请参见清单 4)。
清单 4. 创建 rsa 和 dsa 密钥
$ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
$ ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ""
这将为每个密钥类型创建两个文件:公钥(在以 .pub 结尾的文件中)和私钥。您应确保私钥仅由根和 SSH 流程读取——这应自动配置。您可能需要将公钥复制到网络文件系统 (NFS) 共享中的中央位置,使人们能够将其添加到已知主机密钥列表中。