SSH是Secure Shell的缩写,它是一种安全网络协议,用于加密两个端点之间的流量,允许用户通过网络安全地连接和/或传输文件。
SSH主要由网络和系统管理员用于通过网络安全地访问和管理远程资源,例如服务器和网络设备。SSH使用强大的加密方法(如AES )和散列算法(如SHA – 2 和ECDSA)来加密客户端和远程系统之间交换的流量。
目前SSH实现了两种认证方式;基于密码的身份验证和公钥身份验证。当然后者更受欢迎,因为它使用保护系统免受暴力攻击的公钥认证提供更好的安全性。考虑到这一点,本文简单介绍下载RHEL 9上系统中配置基于SSH密钥的身份验证。
测试环境配置
- 需要在Linux/UNIX(基于Ubuntu或基于 RHEL)系统上进行配置,本文小编使用的是Ubuntu发行版。
- 一个安装RHEL 9系统的实例(可以是本地服务器或云服务器VPS)。
第 1 步:生成ECDSA SSH密钥对
首先访问Linux系统并生成SSH密钥对,本文将使用提供更好加密和安全性的ECDSA算法生成密钥对。因此,要生成ECDSA密钥对,请运行以下命令:
$ ssh-keygen -t ecdsa
该命令将引导提示你完成一系列设置。
默认情况下,密钥对保存在~/.ssh目录内的用户主目录中,可以通过按键盘上的ENTER来接受它作为SSH密钥对的目标路径,当然,你也可以指定自定义的路径。在本文中,小编使用默认路径。
接下来,系统将提示需要输入密码。这基本上是你在与远程RHEL 9系统建立连接时需要提供的密码。它只是在SSH密钥提供的加密之上提供了一层额外的保护。
但是,如果你的服务器是通过SSH保护自动执行流程或配置无密码身份验证,则建议将此留空。因此,再次按ENTER将其留空。下图是命令运行时的输出:
设置完成之后,可以使用ls命令查看SSH密钥对,命令如下;
$ ls -l ~/.ssh
id_ecdsa是私钥,而id_ecdsa.pub是公钥。注意,私钥应始终保密,不应与任何人共享或泄露。另外,你可以自由地与你想要连接的任何远程系统共享公共信息。
第 2 步:将公共SSH密钥复制到远程RHEL 9
下一步是将公钥复制到远程RHEL 9实例,可以通过手动方式或使用ssh-copy-id命令行工具来执行此操作。由于后者使用起来更容易、更方便,因此请使用以下语法调用它。
$ ssh-copy-id user@rhel-9-server-IP
在本文中,tecmint是常规登录用户,192.168.254.12是远程用户的IP地址,所以命令如下:
$ ssh-copy-id tecmint@192.168.254.12
键入yes继续连接,然后提供远程用户的密码并按ENTER。
公钥将被复制到远程用户主目录的~/.ssh目录下的authorized_keys文件中。复制密钥后,现在可以使用公钥身份验证登录到远程RHEL 9系统。
注意:在RHEL 9中,默认情况下禁用或拒绝通过SSH进行的root登录。这是有充分理由的——它可以防止攻击者使用root帐户登录,这将授予他系统上的所有权限。因此,以 root 身份将公钥复制到RHEL系统将失败。
在RHEL 9中启用root登录
如果需要以root身份登录,则需要编辑默认的SSH配置,如下所示。
$ sudo vim /etc/ssh/sshd_config
接下来,将PermitRootLogin属性设置为yes
并保存更改并退出文件。
要应用所做的更改,请重新启动SSH服务。
$ sudo systemctl restart ssh
第 3 步:验证SSH公钥身份验证
现在让要做的事情是公钥认证。为此,请按如下方式登录:
$ ssh tecmint@192.168.254.12
这一次,系统不会提示输入密码,而是直接进入远程RHEL 9 shell界面,如下图所示。当然,你可能还想验证是否存在authorized_keys文件,为此输入以下命令:
$ ls -l ~/.ssh
此外,还可以使用cat 命令查看加密公钥文件。
$ cat ~/.ssh/authorized_keys
在生成SSH密钥的Linux桌面上,在~/.ssh目录中生成了一个名为known_hosts的文件,这包含系统已连接到的所有远程服务器的日志记录。
总结
以上就是在在RHEL 9上成功配置了基于SSH密钥的身份验证的简单方法,设置过程还是比较简单。这样通过SSH密钥身份验证方式登录远程服务器,不但安全,而且还很方便,无需输入密码即可等。
众所周知,SSH是一种安全通道协议,是用来实现字符界面的远程登陆,远程复制等功能的。SSH协议对通信双方的数据进行了加密处理,其中包括用户登陆时输入的用户口令和密钥身份验证,其中密钥身份验证登录方式更值得推荐。