Secure Shell (SSH) 仍然是连接到远程 Linux 服务器和各种网络设备的实际方式。随着对 Ansible 等自动化技术的更大依赖,它的使用不仅没有失去重要性,反而有所增加。
假设您的开发团队在他们的测试环境中建立了一个新的网络服务器,并且忽略了在服务器的防火墙中打开端口 80 和 443。团队与您联系,要求您解决问题。您可以使用 SSH 远程访问网络服务器。您建立连接,在出现提示时输入密码并完成防火墙配置。它快速、简单且安全。但是有更好的方法吗?
本教程涵盖实施和使用基于密钥的身份验证以支持更轻松的 SSH 身份验证和改进的自动化。SSH 身份验证方法可能是CompTIA Linux+和CompTIA Security+考试的主题。
在您的家庭实验室中将本教程与两个或多个基于 Linux 的虚拟机一起使用。熟悉基于密钥的身份验证的另一种好方法是在连接到Raspberry Pi计算机时使用它。这些设备是开始使用 Linux 的好方法。
标准 SSH 身份验证
SSH 的标准语法包括ssh命令、连接用户的名称以及目标设备的名称或 IP 地址。之后,远程系统提示输入帐户密码。
图 1:标准 SSH 连接的密码挑战
您现在已连接到系统,可以根据您当前的身份进行更改或使用sudo提升您的权限。
什么是基于 SSH 密钥的身份验证?
基于密钥的身份验证通过使用公钥/私钥对替换 SSH 身份验证质询中的“您知道的”密码部分。这种非对称加密唯一地标识了用户。也许更重要的是,至少在自动化的情况下,它不需要手动输入密码。SSH 自动传递身份验证密钥。假设远程系统接受密钥,则身份验证是立即且无声的。
实施步骤
实施基于密钥的身份验证很简单,包括三个步骤:
1.生成密钥对
2.复制公钥到远程服务器
3.测试认证
您还可以编辑/etc/ssh/sshd_config文件以要求在您的远程系统上进行基于密钥的身份验证。
以下是这三个实施步骤的更多详细信息。
生成密钥对
公钥/私钥对是一组在数学上相关的密钥,可以唯一地标识用户或计算机。Linux ssh-keygen命令生成密钥。根据您组织的安全要求,您可以使用-t选项来创建各种类型的密钥。选项包括 RSA、DSA 和 ECDSA。
使用以下命令在您将连接到远程设备的客户端计算机上创建密钥对:
# ssh-keygen
检查~/.ssh目录中的密钥。您将看到id_rsa(私钥)和id_rsa.pub(公钥)。密钥名称可能因所选的加密方法而异。
图 2:ssh-keygen 命令生成公钥/私钥对
滚动到文件底部并观察用户名。请记住,这是远程系统识别的用户。
密钥生成实用程序为您提供了设置密码的机会。按两次Enter跳过此提示。您可能不想设置密码,尤其是当您在自动化环境中使用 SSH 时。
复制公钥
密钥对现在驻留在您的客户端计算机上。这可能是您办公桌上用于远程连接到您负责的各种设备的计算机。下一步是将公钥复制到远程系统。
Linux 也有针对此任务的特定命令。命令是ssh-copy-id。例如,要将用户student的密钥复制到远程服务器192.168.1.101,请键入:
# ssh-copy-id学生@192.168.1.101
图 3:ssh-copy-id 命令将用户的公钥复制到远程服务器
远程系统提示您输入密码。键入用于连接到目标服务器的用户帐户的密码。如果一切顺利,这是您最后一次必须输入此密码。
您可以检查远程系统的~/.ssh/authorized_keys文件并找到公钥。
图 4:公钥文件的内容
测试身份验证
测试新的身份验证方法就像建立 SSH 连接一样简单。键入通常的ssh命令并观察远程系统不会向您询问密码。你只是连接!
图 5:基于密钥的 SSH 连接没有密码挑战
SSH 连接在后台传递公钥,证明您的身份。
明显的好处是易于连接。不再被要求输入密码很方便。然而,在自动化的背景下,基于密钥的身份验证使管理员不必输入或尝试保护文件中的密码。自动化工具可以在管理员不在场的情况下使用 SSH 连接并完成它们的任务。很难夸大此功能在当今自动化世界中的重要性。
强制执行基于密钥的身份验证
SSH 的基于密钥的身份验证肯定会改善您组织的安全状况。要实施此方法,请更新远程服务器上的/etc/ssh/sshd_config文件以要求基于密钥的身份验证并拒绝基于密码的连接尝试。
打开远程服务器上的/etc/ssh/sshd_config文件进行编辑。找到读取PubKeyAuthentication的节并将其编辑为yes。找到PasswordAuthentication的节并将其设置为no。
密码认证号
PubKeyAuthentication 是
当您这样做时,请考虑其他 SSH 安全最佳实践,例如将用户列入白名单和拒绝 root 帐户的远程连接。以下条目可能有助于更好地保护您的 SSH 连接。在生产环境中实施它们之前,请务必了解并测试它们。一个错误可能会停止与服务器的远程连接。
PermitEmptyPasswords 否
PermitRoot登录号
允许用户 admin1
保持练习
基于 SSH 密钥的身份验证对于当今的远程管理和自动化任务至关重要。花几分钟清点您经常通过 SSH 连接的 Linux 服务器和网络设备,然后创建一个密钥对。将公钥复制到这些系统。我还鼓励您将这些目标设备配置为需要 SSH 密钥进行身份验证并拒绝基于密码的尝试。
如果您正在准备 CompTIA Linux+、CompTIA Security+ 或CompTIA Cybersecurity Analyst (CySA+)等认证考试,请确保您可以识别与基于密钥的身份验证相关的组件和命令。在您的家庭实验室环境中完成这些步骤,直到它们成为第二天性。