12.2. 配置 OpenSSH
12.2.1. 配置文件
共有两组不同的配置文件:用于客户端程序(即 ssh
、scp 和 s
ftp
)的配置文件,以及用于服务器( sshd
守护进程)的配置文件。
系统范围的 SSH 配置信息保存在 /etc/ssh/
目录中,如 表 12.1 “系统范围的配置文件” 所述。用户特定的 SSH 配置信息保存在用户主目录中的 ~/.ssh/
中,如 表 12.2 “用户特定配置文件” 所述。
File | 描述 |
---|---|
| 包含 Diffie-Hellman 组,用于 Diffie-Hellman 密钥交换,这对构建安全传输层至关重要。当在 SSH 会话开始时交换密钥时,会创建一个共享的 secret 值,它不能由任一方单独决定。该值随后用于提供主机身份验证。 |
|
默认的 SSH 客户端配置文件。请注意,如果 ~/.ssh/config 存在,它将被 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File | 描述 |
---|---|
| 保存服务器的授权公钥列表。当客户端连接到服务器时,服务器通过检查存储在此文件中的签名公钥来验证客户端的身份验证。 |
| 包含用户的 ECDSA 私钥。 |
| 用户的 ECDSA 公钥. |
|
|
|
|
| 包含用户访问的 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 登录时捕获。要禁用的一些服务包括 telnet
、rsh
、rlogin
和 vsftpd
。
有关如何配置 vsftpd
服务的详情请参考 第 16.2 节 “FTP”。要了解如何在 Red Hat Enterprise Linux 7 中管理系统服务,请参阅 第 10 章 使用 systemd 管理服务。
12.2.4. 使用基于密钥的身份验证
要进一步提高系统安全性,请生成 SSH 密钥对,然后通过禁用密码身份验证来强制进行基于密钥的身份验证。要做到这一点,在文本编辑器(如 vi 或 nano )中打开 /etc/ssh/sshd_config
配置文件,并更改 PasswordAuthentication
选项,如下所示:
PasswordAuthentication no
如果您在使用新默认安装以外的系统中,请检查 PubkeyAuthentication no
没有设置。如果远程连接,不使用控制台或带外访问,建议在禁用密码身份验证前测试基于密钥的登录过程。
要能够使用 ssh
、scp
或 sftp
从客户端计算机连接到服务器,请按照以下步骤生成授权密钥对:请注意,必须为每个用户单独生成密钥。
要在 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 密钥对,请按照以下步骤执行:
通过在 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):
-
按 Enter 键 确认新创建的密钥的默认位置
~/.ssh/id_rsa
。 输入密码短语,并在系统提示时再次输入密码进行确认。为安全起见,请避免使用与登录到您的帐户相同的密码。
之后,您将会看到类似如下的信息:
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
命令。默认情况下,
~/.ssh/
目录的权限被设置为rwx------
或700
(以八进制表示法表示)。这是为了确保只有 USER 可以查看其内容。如果需要,可以使用以下命令确认:~]$
ls -ld ~/.ssh
drwx------. 2 USER USER 54 Nov 25 16:56 /home/USER/.ssh/要将公钥复制到远程机器中,以以下格式发出命令:
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 密钥对,请按照以下步骤执行:
通过在 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):
-
按 Enter 键 确认新创建的密钥的默认位置
~/.ssh/id_ecdsa
。 输入密码短语,并在系统提示时再次输入密码进行确认。为安全起见,请避免使用与登录到您的帐户相同的密码。
之后,您将会看到类似如下的信息:
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]-----+
默认情况下,
~/.ssh/
目录的权限被设置为rwx------
或700
(以八进制表示法表示)。这是为了确保只有 USER 可以查看其内容。如果需要,可以使用以下命令确认:~]$
ls -ld ~/.ssh
~]$ ls -ld ~/.ssh/ drwx------. 2 USER USER 54 Nov 25 16:56 /home/USER/.ssh/要将公钥复制到远程机器中,以以下格式发出命令:
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 会话中保存密码短语,请按照以下步骤执行:
- 确保已安装了 openssh-askpass 软件包。如果没有,请参阅 第 9.2.4 节 “安装软件包” 以了解有关如何在 Red Hat Enterprise Linux 中安装新软件包的更多信息。
按 Super 键进入 Activities Overview,键入
Startup Applications
,然后按 Enter 键。此时 会出现启动应用首选项 工具。默认情况下,将显示包含可用启动程序列表的选项卡。Super 键显示在各种 guis 中,具体取决于键盘和其他硬件,但通常作为 Windows 或 Command 键,通常在空格的左侧。图 12.1. 启动应用首选项
单击右侧的
按钮,然后在Command
字段中输入/usr/bin/ssh-add
。图 12.2. 添加新应用程序
图 12.3. 启用应用程序
注销,然后重新登录。系统将显示一个对话框,提示您输入密码短语。从此时开始,不会通过
ssh
、scp 或 s
ftp
提示您输入密码。图 12.4. 输入密码
要为特定的 shell 提示符保存密码短语,请使用以下命令:
~]$ ssh-add Enter passphrase for /home/USER/.ssh/id_rsa:
请注意,退出时会忘记您的密码短语。每次登录虚拟控制台或终端窗口时,都必须执行 命令。