Linux中如何设置SSH密钥提升登陆安全性

Posted 恒生LIGHT云社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中如何设置SSH密钥提升登陆安全性相关的知识,希望对你有一定的参考价值。

​​


作者:幻好


概述

随着云技术的成熟,越来越多的人开始使用云服务器搭建自己的应用,但是很多人并不在意网络安全的问题,导致服务器被黑客攻击,最后追悔莫及。本文将对安全登陆协议SSH的创建及使用进行介绍,帮助大家提高安全防范。

SSH(安全外壳协议)是一种加密网络协议,它允许用户通过不安全的网络安全地访问远程计算机。

SSH 密钥是一种更安全的登录 SSH 服务器的方法,因为它们不易受到常见的暴力密码黑客攻击。尽管 SSH 支持基于密码的身份验证,但通常建议使用​SSH 密钥​。生成 SSH 密钥对会创建两个长字符串:​公钥​ 和 ​私钥​。可以将公钥放在任何服务器上,然后使用可以访问私钥的 SSH 客户端连接到服务器。当公钥和私钥匹配时,SSH 服务器无需密码即可授予访问权限。也可以通过使用可选(但强烈推荐)的密码保护私钥来进一步提高密钥对的安全性。

具体操作

创建密钥对

首先是在客户端机器上创建一个密钥。这可能是本地计算机。在本地命令行中键入命令:​​ssh-keygen -t ed25519​

[root@localhost ~]# ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):

输入命令后,会看到输出的命令确认信息,需要输入密钥保存地址


如果使用的系统是不支持创建 ​​ed25519​​​密钥的旧系统,或者连接的服务器不支持它们,则需要创建一个强 ​​rsa​​​密钥对:​​ssh-keygen -t rsa -b 4096 ​​​ 复制这会将 ​​-t​​​“类型”标志更改为 ​​rsa​​​,并添加​-b 4096​​“位”标志以创建 4096 位密钥。


指定保存密钥的位置

​ssh-keygen​​命令的第一个提示是询问保存密钥的位置:

Enter file in which to save the key (/root/.ssh/id_ed25519):

可以直接按 ​​ENTER​​​此处将文件保存到 ​​.ssh​​您的主目录中的默认位置,或者指定系统中某一地址目录。

这里我们直接回车,保存默认地址

创建密码

确认保存地址后,会提示需要设置一个密码:

Enter passphrase (empty for no passphrase):

密码也可以直接默认不设置,但强烈建议还是设置密码,因为密钥的安全性,还是基于设置的复杂程度。如果没有密码的私钥落入未经授权的其他人手上,他们将能够登录到你使用相关公钥配置的任何服务器。

回顾一下,整个密钥生成过程如下所示:

[root@localhost ~]# ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):
Created directory /root/.ssh.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ed25519.
Your public key has been saved in /root/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:hRTOxc4IFviuv0vr4q61fGTee2Xo5Ol/gmUtZh/Y55s root@localhost.localdomain
The keys randomart image is:
+--[ED25519 256]--+
| ...oo. |
| . o+ o. |
| o .++. |
| . ..o |
| . S . + |
| + o X + .|
| .=.. + X o + |
| oooo.. * . o o|
| .+==*o.+...o E.|
+----[SHA256]-----+

公钥现在位于 ​​/root/.ssh/id_ed25519.pub.​

私钥现在位于 ​​/root/.ssh/id_ed25519.​

将公钥复制到远程服务器

生成密钥对后,就可以将公钥放在要连接的服务器上。

可以 ​​authorized_keys​​​使用该 ​​ssh-copy-id​​命令将公钥复制到服务器的文件中。确保替换示例用户名和地址

ssh-id user@server_address

命令完成后,将能够通过 SSH 登录服务器,而不会被提示输入密码。但是,如果在创建 SSH 密钥时设置了密码,则需要输入密码。主要是因为本地的ssh客户端需要进行解密,而不是远程服务器需要解密。

禁用基于密码的 SSH 身份验证

将 SSH 密钥复制到服务器后,可以通过将 SSH 服务器配置为禁用基于密码的身份验证来完全禁止密码登录。


在禁用基于密码的身份验证之前,要​确保可以使用 SSH 密钥成功登录服务器​,并且服务器上没有其他用户使用密码登录。


要禁用基于密码的 SSH 身份验证,请打开 SSH 配置文件。它通常位于以下位置:

sudo nano /etc/ssh/sshd_config

此命令将在 ​​nano​​​文本编辑器中打开文件。在文件中找到包含 ​​PasswordAuthentication​​​的行(如果不存在则创建该行),确保没有 ​​#​​​在该行的开头用 a 注释掉,并将其更改为 ​​no​​​:​​/etc/ssh/sshd_config​

PasswordAuthentication no

完成后保存并关闭文件。在 中 ​​nano​​​,使用 ​​CTRL+O​​​保存,点击​ENTER​​​确认文件名,然后 ​​CTRL+X​​退出。

重新加载 ​​sshd​​服务以使这些更改生效:

sudo systemctl reload sshd

在退出当前的 SSH 会话之前,可在另一个终端中进行测试连接以验证其仍然可以连接。

结论

本文中,我们创建了一个 SSH 密钥对,将公钥复制到了服务器,并且(可选)完全禁用了基于密码的身份验证,通过这些操作能够帮助我们提升服务器的安全性。


想向技术大佬们多多取经?开发中遇到的问题何处探讨?如何获取金融科技海量资源?

​恒生LIGHT云社区​​,由恒生电子搭建的金融科技专业社区平台,分享实用技术干货、资源数据、金融科技行业趋势,拥抱所有金融开发者。

扫描下方小程序二维码,加入我们!


以上是关于Linux中如何设置SSH密钥提升登陆安全性的主要内容,如果未能解决你的问题,请参考以下文章

linux如何配置ssh密钥登录

putty如何设置密钥登陆

Linux主机生成密钥对

Linux密钥登陆

SSH详解-3.密钥登陆

如何设置ssh安全只允许用户从指定的IP登陆