随着互联网的发展,网络攻击和数据泄露事件频发。为了确保Linux服务器的安全性,我们可以通过启用SSH密钥认证来替代传统的密码登录方式。SSH(Secure Shell)是一种用于远程管理系统的安全协议,它允许用户通过加密连接访问服务器。与使用密码相比,SSH密钥认证具有更高的安全性,并且可以防止暴力破解等攻击手段。
一、生成密钥对
在本地计算机上打开终端窗口,然后输入以下命令来创建一个新的SSH密钥对:
ssh-keygen -t rsa -b 4096
该命令会生成一个基于RSA算法的4096位私钥和公钥。系统将会询问您要将生成的密钥保存到哪个文件中,默认路径为~/.ssh/id_rsa
,您可以直接按回车键接受默认值。接下来,根据提示设置一个用于保护私钥的密码短语(passphrase),即使私钥被窃取,没有密码短语也无法使用。
二、复制公钥到服务器
现在我们需要将刚刚生成的公钥上传至目标Linux服务器。有两种方法可以实现这一步骤:
1. 使用ssh-copy-id
命令:
如果您的服务器支持此命令,则可以在本地计算机上运行以下命令:ssh-copy-id username@server_ip_address
其中,将username
替换为您的用户名,将server_ip_address
替换为服务器的实际IP地址。此命令会自动将公钥添加到服务器上的~/.ssh/authorized_keys
文件中。
2. 手动复制公钥:
如果您无法使用ssh-copy-id
命令,则需要手动完成这项工作。在本地计算机上打开~/.ssh/id_rsa.pub
文件并复制其内容。然后登录到服务器并编辑~/.ssh/authorized_keys
文件(如果没有此文件,请先创建)。最后将公钥粘贴到该文件中并保存更改。
三、配置SSH服务端
为了让服务器只允许使用SSH密钥进行身份验证,我们需要修改SSH服务端的配置文件。通常情况下,该文件位于/etc/ssh/sshd_config
。
使用文本编辑器打开此文件,并查找以下几行:#PubkeyAuthentication yes
取消注释(删除前面的“#”符号),以启用公钥认证。
为了进一步增强安全性,建议禁用密码登录功能。找到以下行:#PasswordAuthentication yes
将其更改为:PasswordAuthentication no
完成后保存文件并重新启动SSH服务使更改生效。
对于基于Debian/Ubuntu系统的服务器,可以执行以下命令重启服务:sudo service ssh restart
对于基于Red Hat/CentOS系统的服务器,可以执行以下命令重启服务:sudo systemctl restart sshd
四、测试新的登录方式
现在从本地计算机尝试再次连接到服务器。如果一切正常,您应该能够顺利登录而无需输入密码。但是请注意,首次连接时仍需输入用于保护私钥的密码短语(如果您设置了的话)。由于我们已经禁用了密码登录,因此如果您忘记携带私钥或丢失了私钥文件,则将无法再通过SSH访问服务器。为了避免这种情况发生,建议您妥善保管好私钥,并考虑创建多个SSH密钥对以便备用。