在CentOS上设置SSH公钥身份验证的2个简单步骤

本教程说明了如何设置 SSH公钥认证 在CentOS / RHEL桌面上。 基本上有两种通过OpenSSH服务器验证用户登录身份的方法: 密码认证公钥认证。 后者也称为 无密码SSH登录 因为您不需要输入密码。

步骤1:在CentOS / RHEL桌面上生成SSH公钥/私钥对

在CentOS / RHEL桌面(而不是服务器)上,在终端窗口中输入以下命令。

ssh-keygen -t rsa -b 4096

哪里:

  • -t 代表 type。 上面的命令生成一个RSA类型的密钥对。 RSA是默认类型。
  • -b 代表 bits。 默认情况下,密钥的长度为3072位。 我们使用4096位密钥来增强安全性。

当询问您要保存密钥的文件时,只需按 Enter 使用默认文件。 接下来,输入一个至少20个字符长的密码。 密码短语用于加密私钥。

  • 私钥(不要与任何人共享)将保存在 .ssh / id_rsa 文件放在主目录下。
  • 公钥将保存在 .ssh / id_rsa.pub 文件。

从randomart图片中,我们可以看到密钥的长度(RSA 4096)。 现在运行以下命令。

file ~/.ssh/id_rsa

您应该看到以下输出:

/home/username/.ssh/id_rsa: OpenSSH private key

如果看到“没有这样的文件或目录”错误,则表明未创建SSH密钥对。 跑过 ssh-keygen -t rsa -b 4096 命令再次创建它。

步骤2:将SSH公钥上载到远程Linux服务器

暗示:远程服务器可以运行任何Linux发行版:DebianUbuntu,RHEL,CentOS,无论如何,只要它运行OpenSSH服务器,就可以使用以下方法。

这很容易做到 ssh-copy-id 命令,随命令一起提供 openssh-clients 包。

ssh-copy-id [email protected]

输入远程用户的密码。

centos ssh键

公钥将存储在 .ssh / authorized_keys 文件位于远程用户的主目录下。 现在,SSH进入远程服务器。

ssh [email protected]

这次您需要输入RSA 密码短语 解锁私钥。 您可以在登录时选择自动解锁密钥,这样以后就不必输入密码了。

生成ssh公钥中心

输入正确的密钥密码后,您将登录到远程Linux服务器。 现在从远程服务器退出。

exit

然后再次SSH到远程服务器:

ssh [email protected]r-ip

这次,尽管您没有键入密码或密钥密码,但是您仍自动登录到远程服务器。 另外,使用时,您无需键入密码或密钥密码 scp 传输文件的命令。 的 scp 命令由 openssh-clients 软件包,默认情况下安装在CentOS / RHEL桌面上。

在远程服务器上实施SSH公钥身份验证

尽管默认情况下现在使用SSH密钥登录服务器,但是您仍然可以使用密码登录另一台计算机上的服务器。 您不希望黑客对您的服务器发起暴力攻击,因此在OpenSSH服务器中禁用密码身份验证是一个好习惯。

要禁用密码验证,请编辑 /etc/ssh/sshd_config 文件在远程服务器上。

sudo nano /etc/ssh/sshd_config

找到这一行:

#PasswordAuthentication yes

更改为:

PasswordAuthentication no

然后找到 ChallengeResponseAuthentication 线。 确保将其值设置为 no 像下面如果设置为 yes,您仍然可以使用密码登录。

ChallengeResponseAuthentication no

保存文件并重新启动SSH服务。

sudo systemctl restart sshd

现在,如果您没有对应的私钥 ~/.ssh 目录中,当您尝试通过SSH进入远程服务器时,将看到以下错误。

Permission denied (publickey).

这意味着远程服务器仅允许使用ssh密钥进行SSH登录,而不允许密码验证。 注意 如果你设置 PasswordAuthenticationnoChallengeResponseAuthenticationyes,那么您仍然可以使用密码登录。 要禁用密码登录,必须将两者都设置为 no

备份公共/私人密钥对

禁用SSH密码身份验证后,备份SSH密钥非常重要。 如果您丢失密钥,则将被锁定在服务器之外。 将公共/专用密钥对备份到安全位置,例如USB驱动器。

cp ~/.ssh/id_rsa* /path/to/safe/location/

您可以将密钥对复制到新的Linux计算机上,然后使用SSH密钥将SSH复制到服务器中。 将密钥对复制到新计算机后,将其移动到 .ssh/ 新用户的目录。

mv id_rsa* ~/.ssh/

您需要将密钥对的所有者更改为新计算机上的用户。

sudo chown new-user:new-user ~/.ssh/id_rsa*

现在,您可以使用SSH密钥登录到新计算机上的远程服务器。

您还可以将密钥对存储在一个文件夹中,然后使用加密压缩该文件夹并将其发送到NextCloud之类的云存储。

允许从受信任的IP地址进行密码身份验证

您可能希望允许使用自己的IP地址进行密码身份验证,因此,如果SSH密钥丢失了,您仍然可以通过SSH登录到服务器。

暗示:如果您没有静态IP地址,则可以在数据中心内设置自托管的VPN服务器。

打开远程服务器上的SSH守护程序配置文件。

sudo nano /etc/ssh/sshd_config

在文件底部添加以下行。 用您自己的IP地址替换10.0.0.2。

Match Address 10.0.0.2
   PasswordAuthentication yes

如果客户端从192.168.0.2连接,则允许密码身份验证。 您可以添加多个IP地址。

Match Address 10.0.0.2 10.0.0.3
   PasswordAuthentication yes

或像这样使用CIDR表示法:

Match Address 10.0.0.0/24
   PasswordAuthentication yes

保存并关闭文件。 重新启动OpenSSH服务器。

sudo systemctl restart sshd

更改私钥密码

如果您需要更改私钥密码,则可以使用以下命令进行更改:

ssh-keygen -f ~/.ssh/id_rsa -p

输入您的旧密码,然后输入新密码。

包起来

希望本教程对您有所帮助 SSH公钥认证 在CentOS / RHEL桌面上。 您可能还想阅读:

  • 在Windows上使用SSH登录Linux服务器的3种方法

与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂

Sidebar