Red Hat Training

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

12.2. 配置 OpenSSH

12.2.1. 配置文件

共有两组不同的配置文件:用于客户端程序(即 sshscp 和 s ftp)的配置文件,以及用于服务器( sshd 守护进程)的配置文件。

系统范围的 SSH 配置信息保存在 /etc/ssh/ 目录中,如 表 12.1 “系统范围的配置文件” 所述。用户特定的 SSH 配置信息保存在用户主目录中的 ~/.ssh/ 中,如 表 12.2 “用户特定配置文件” 所述。

表 12.1. 系统范围的配置文件

File描述

/etc/ssh/moduli

包含 Diffie-Hellman 组,用于 Diffie-Hellman 密钥交换,这对构建安全传输层至关重要。当在 SSH 会话开始时交换密钥时,会创建一个共享的 secret 值,它不能由任一方单独决定。该值随后用于提供主机身份验证。

/etc/ssh/ssh_config

默认的 SSH 客户端配置文件。请注意,如果 ~/.ssh/config 存在,它将被 ~/.ssh/config 覆盖。

/etc/ssh/sshd_config

sshd 守护进程的配置文件。

/etc/ssh/ssh_host_ecdsa_key

sshd 守护进程使用的 ECDSA 私钥。

/etc/ssh/ssh_host_ecdsa_key.pub

sshd 守护进程使用的 ECDSA 公钥。

/etc/ssh/ssh_host_rsa_key

sshd 守护进程用于 SSH 协议版本 2 的 RSA 私钥。

/etc/ssh/ssh_host_rsa_key.pub

sshd 守护进程用于 SSH 协议版本 2 的 RSA 公钥。

/etc/pam.d/sshd

sshd 守护进程的 PAM 配置文件。

/etc/sysconfig/sshd

sshd 服务的配置文件。

表 12.2. 用户特定配置文件

File描述

~/.ssh/authorized_keys

保存服务器的授权公钥列表。当客户端连接到服务器时,服务器通过检查存储在此文件中的签名公钥来验证客户端的身份验证。

~/.ssh/id_ecdsa

包含用户的 ECDSA 私钥。

~/.ssh/id_ecdsa.pub

用户的 ECDSA 公钥.

~/.ssh/id_rsa

ssh 用于 SSH 协议版本 2 的 RSA 私钥。

~/.ssh/id_rsa.pub

ssh 用于 SSH 协议版本 2 的 RSA 公钥。

~/.ssh/known_hosts

包含用户访问的 SSH 服务器的主机密钥。此文件对于确保 SSH 客户端连接到正确的 SSH 服务器非常重要。

警告

如果设置 SSH 服务器,请不要使用 /etc/ssh/sshd_config 文件中的 UsePrivilegeSeparation no 指令来关闭特权 隔离 功能。关闭 特权解析会禁用 许多安全功能,并会使服务器暴露于潜在的安全漏洞和目标攻击。有关 UsePrivilegeSeparation 的更多信息,请参阅 sshd_config(5)手册页,或者 /etc/ssh/sshd_config 文件中 UsePrivilegeSeparation 指令的重要性以及如何对其进行测试?红帽知识库文章.

有关 SSH 配置文件中可以使用的各种指令的详情,请查看 ssh_config(5)和 sshd_config(5)手册页。

12.2.2. 启动 OpenSSH 服务器

为了运行 OpenSSH 服务器,您必须安装 openssh-server 软件包。有关如何安装新软件包的详情请参考 第 9.2.4 节 “安装软件包”

要在当前会话中启动 sshd 守护进程,以 root 用户身份在 shell 提示符后输入以下内容:

~]# systemctl start sshd.service

要在当前会话中停止正在运行的 sshd 守护进程,以 root 用户身份运行以下命令:

~]# systemctl stop sshd.service

如果您希望守护进程在引导时自动启动,以 root 用户身份输入

~]# systemctl enable sshd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib/systemd/system/sshd.service.

sshd 守护进程依赖于 network.target 目标 单元,这足以用于静态配置的网络接口和默认的 ListenAddress 0.0.0.0 选项。要在 ListenAddress 指令中指定不同的地址并使用较慢的动态网络配置,请将 network-online.target 目标 单元的依赖关系添加到 sshd.service 单元文件中。要做到这一点,使用以下选项创建 /etc/systemd/system/sshd.service.d/local.conf 文件:

 [Unit]
 Wants=network-online.target
 After=network-online.target

之后,使用以下命令重新载入 systemd 管理器配置:

~]# systemctl daemon-reload

有关如何在 Red Hat Enterprise Linux 中管理系统服务的详情请参考 第 10 章 使用 systemd 管理服务

请注意,如果您重新安装系统,则会创建新的识别密钥集合。因此,在重新安装前使用任何 OpenSSH 工具连接到该系统的客户端会看到以下信息:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@: REMOTE HOST IDENTIFICATION HAS CHANGED!   @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.

要防止这种情况,您可以从 /etc/ssh/ 目录中备份相关文件。有关完整的列表,请查看 表 12.1 “系统范围的配置文件”,每当您重新安装系统时都会恢复文件。

12.2.3. 远程连接需要 SSH

要使 SSH 真正有效,应禁止使用不安全的连接协议。否则,用户的密码可能通过 SSH 对一个会话进行保护,稍后仅在使用 Telnet 登录时捕获。要禁用的一些服务包括 telnetrshrloginvsftpd

有关如何配置 vsftpd 服务的详情请参考 第 16.2 节 “FTP”。要了解如何在 Red Hat Enterprise Linux 7 中管理系统服务,请参阅 第 10 章 使用 systemd 管理服务

12.2.4. 使用基于密钥的身份验证

要进一步提高系统安全性,请生成 SSH 密钥对,然后通过禁用密码身份验证来强制进行基于密钥的身份验证。要做到这一点,在文本编辑器(如 vinano )中打开 /etc/ssh/sshd_config 配置文件,并更改 PasswordAuthentication 选项,如下所示:

PasswordAuthentication no

如果您在使用新默认安装以外的系统中,请检查 PubkeyAuthentication no 没有设置。如果远程连接,不使用控制台或带外访问,建议在禁用密码身份验证前测试基于密钥的登录过程。

要能够使用 sshscpsftp 从客户端计算机连接到服务器,请按照以下步骤生成授权密钥对:请注意,必须为每个用户单独生成密钥。

要在 NFS 挂载的主目录中使用基于密钥的身份验证,请首先启用 use_nfs_home_dirs SELinux 布尔值:

~]# setsebool -P use_nfs_home_dirs 1

Red Hat Enterprise Linux 7 默认使用 SSH 协议 2 和 RSA 密钥(详情请参阅 第 12.1.3 节 “协议版本” )。

重要

如果以 root 身份完成这些步骤,则只有 root 用户 才能使用该密钥。

注意

如果您重新安装您的系统并希望保留先前生成的密钥对,请备份 ~/.ssh/ 目录。重新安装后,将其复制到主目录中。此过程可以针对您系统上的所有用户完成,包括 root 用户

12.2.4.1. 生成密钥对

要为 SSH 协议的版本 2 生成 RSA 密钥对,请按照以下步骤执行:

  1. 通过在 shell 提示符后输入以下内容来生成 RSA 密钥对:

    ~]$ ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/USER/.ssh/id_rsa):
  2. Enter 键 确认新创建的密钥的默认位置 ~/.ssh/id_rsa
  3. 输入密码短语,并在系统提示时再次输入密码进行确认。为安全起见,请避免使用与登录到您的帐户相同的密码。

    之后,您将会看到类似如下的信息:

    Your identification has been saved in /home/USER/.ssh/id_rsa.
    Your public key has been saved in /home/USER/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:UNIgIT4wfhdQH/K7yqmjsbZnnyGDKiDviv492U5z78Y USER@penguin.example.com
    The key's randomart image is:
    +---[RSA 2048]----+
    |o ..==o+.    |
    |.+ . .=oo    |
    | .o. ..o     |
    | ... ..    |
    |    .S    |
    |o .   .    |
    |o+ o .o+ ..   |
    |+.++=o*.o .E   |
    |BBBo+Bo. oo   |
    +----[SHA256]-----+
    注意

    要获得之前版本中的默认指纹 MD5 密钥指纹,请使用带有 -E md5 选项的 ssh-keygen 命令。

  4. 默认情况下,~/.ssh/ 目录的权限被设置为 rwx------700 (以八进制表示法表示)。这是为了确保只有 USER 可以查看其内容。如果需要,可以使用以下命令确认:

    ~]$ ls -ld ~/.ssh
    drwx------. 2 USER USER 54 Nov 25 16:56 /home/USER/.ssh/
  5. 要将公钥复制到远程机器中,以以下格式发出命令:

     ssh-copy-id user@hostname

    这将复制最新修改的 ~/.ssh/id*.pub 公钥(如果尚未安装)。或者,指定公钥的文件名,如下所示:

    ssh-copy-id -i ~/.ssh/id_rsa.pub user@hostname

    这会将 ~/.ssh/id_rsa.pub 的内容复制到您要连接的计算机上的 ~/.ssh/authorized_keys 文件中。如果文件已存在,则密钥将附加到该文件末尾。

要为 SSH 协议的版本 2 生成 ECDSA 密钥对,请按照以下步骤执行:

  1. 通过在 shell 提示符下键入以下内容来生成 ECDSA 密钥对:

    ~]$ ssh-keygen -t ecdsa
    Generating public/private ecdsa key pair.
    Enter file in which to save the key (/home/USER/.ssh/id_ecdsa):
  2. Enter 键 确认新创建的密钥的默认位置 ~/.ssh/id_ecdsa
  3. 输入密码短语,并在系统提示时再次输入密码进行确认。为安全起见,请避免使用与登录到您的帐户相同的密码。

    之后,您将会看到类似如下的信息:

    Your identification has been saved in /home/USER/.ssh/id_ecdsa.
    Your public key has been saved in /home/USER/.ssh/id_ecdsa.pub.
    The key fingerprint is:
    SHA256:8BhZageKrLXM99z5f/AM9aPo/KAUd8ZZFPcPFWqK6+M USER@penguin.example.com
    The key's randomart image is:
    +---[ECDSA 256]---+
    |   . .   +=|
    | . . . =   o.o|
    | + . * .  o...|
    | = . . * . + +..|
    |. + . . So o * ..|
    |  . o . .+ = ..|
    |   o oo ..=. .|
    |    ooo...+ |
    |    .E++oo  |
    +----[SHA256]-----+
  4. 默认情况下,~/.ssh/ 目录的权限被设置为 rwx------700 (以八进制表示法表示)。这是为了确保只有 USER 可以查看其内容。如果需要,可以使用以下命令确认:

    ~]$ ls -ld ~/.ssh
           ~]$ ls -ld ~/.ssh/
    drwx------. 2 USER USER 54 Nov 25 16:56 /home/USER/.ssh/
  5. 要将公钥复制到远程机器中,以以下格式发出命令:

    ssh-copy-id USER@hostname

    这将复制最新修改的 ~/.ssh/id*.pub 公钥(如果尚未安装)。或者,指定公钥的文件名,如下所示:

    ssh-copy-id -i ~/.ssh/id_ecdsa.pub USER@hostname

    这会将 ~/.ssh/id_ecdsa.pub 的内容复制到您要连接的机器上的 ~/.ssh/authorized_keys 中。如果文件已存在,则密钥将附加到该文件末尾。

有关如何设置您的系统以记住密码,请参阅 第 12.2.4.2 节 “配置 ssh-agent”

重要

私钥仅供您个人使用,因此务必不要将其提供给任何人。

12.2.4.2. 配置 ssh-agent

要存储密码短语,以便您不必在每次与远程计算机发起连接时输入密码短语,您可以使用 ssh-agent 身份验证代理。如果您正在运行 GNOME,您可以将其配置为在每次登录时提示您输入密码短语,并在整个会话期间记住密码短语。否则,您可以存储特定 shell 提示符的密码短语。

要在 GNOME 会话中保存密码短语,请按照以下步骤执行:

  1. 确保已安装了 openssh-askpass 软件包。如果没有,请参阅 第 9.2.4 节 “安装软件包” 以了解有关如何在 Red Hat Enterprise Linux 中安装新软件包的更多信息。
  2. Super 键进入 Activities Overview,键入 Startup Applications,然后按 Enter 键。此时 会出现启动应用首选项 工具。默认情况下,将显示包含可用启动程序列表的选项卡。Super 键显示在各种 guis 中,具体取决于键盘和其他硬件,但通常作为 Windows 或 Command 键,通常在空格的左侧。

    图 12.1. 启动应用首选项

    启动应用首选项
  3. 单击右侧的 添加 按钮,然后在 Command 字段中输入 /usr/bin/ssh-add

    图 12.2. 添加新应用程序

    添加新应用程序
  4. 单击添加,并确保已选中新添加项目旁边的复选框。

    图 12.3. 启用应用程序

    启用应用程序
  5. 注销,然后重新登录。系统将显示一个对话框,提示您输入密码短语。从此时开始,不会通过 sshscp 或 s ftp 提示您输入密码。

    图 12.4. 输入密码

    输入密码

要为特定的 shell 提示符保存密码短语,请使用以下命令:

~]$ ssh-add
Enter passphrase for /home/USER/.ssh/id_rsa:

请注意,退出时会忘记您的密码短语。每次登录虚拟控制台或终端窗口时,都必须执行 命令。