SSH全称Secure Shell是一种加密网络协议,用于客户端和服务器之间的安全连接,并支持各种身份验证机制。两种最流行的机制是基于密码的身份验证和基于公钥的身份验证。

在本教程中,我们将向您展示如何设置基于SSH密钥的身份验证以及如何在不输入密码的情况下连接到Linux服务器。

要在Linux中设置SSH无密码登录,您只需生成SSH的公钥并将其添加到远程主机或者服务器的~/.ssh/authorized_keys文件即可。

在生成新的SSH密钥对之前,首先检查您的客户端计算机上是否已有SSH密钥,您可能不想覆盖现有SSH密钥对。

你可运行ls -al ~/.ssh/id_*.pub命令以查看是否存在SSH密钥。如果存在现有密钥,您可以使用这些密钥并跳过下一步或备份旧密钥并生成新密钥。

如果您看到No such file or directoryno matches found意味着您没有SSH密钥,则可以继续执行下一步并生成新密钥。

生成新的SSH密钥对ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"命令将生成4096位SSH密钥对,并将您的电子邮件地址作为注释。

当提示Enter file in which to save the key (/home/yourusername/.ssh/id_rsa):Enter键接受默认文件位置和文件名。

接下来Enter passphrase (empty for no passphrase):ssh-keygen工具将要求您键入安全密码。是否想要使用密码短语都取决于您,如果您选择使用密码短语,您将获得额外的安全保护。

在大多数情况下,开发人员和系统管理员不使用密码短语,因为它们对完全自动化的流程存在阻碍。如果您不想使用密码短语,请按Enter

生成SSH密钥完成后,您可以使用ls ~/.ssh/id_*命令列出SSH私钥和公钥。

复制公钥服务器。现在您已经生成了SSH密钥对,为了能够使用SSH无密码登录到您的服务器,您需要将公钥复制到您要管理的服务器。

将公钥复制到服务器的最简单方法是使用ssh-copy-id命令。在您的本地的计算机终端运行ssh-copy-id remote_username@server_ip_address

remote_username是远程服务器用户的名称,server_ip_address是你服务器IP地址。

系统将提示您输入remote_username密码。用户通过身份验证后,SSH公钥将追加到远程用户authorized_keys文件,然后ssh-copy-id命令将退出。

使用SSH密钥登录服务器。完成上述步骤后,您应该能够使用SSH无密码登录远程服务器。你可以运行命令ssh remote_username@server_ip_address尝试登录到您的服务器。如果一切顺利,您将立即登录。

禁用SSH密码验证

要为服务器添加额外的安全层,可以禁用SSH的密码身份验证。

在禁用SSH密码身份验证之前,请确保您可以在没有密码的情况下登录到服务器,并且您登录的用户具有sudo权限或者root权限。

如何在Ubuntu上创建sudo用户如何在CentOS上创建sudo用户。教程描述了如何创建sudo用户。

如何在CentOS创建sudo用户 | myfreax
sudo命令旨在允许用户以其它用户身份运行命令,默认情况下为root用户。在本教程中,我们将说明如何在CentOS上创建具有sudo访问权限的用户
Linux的sudo命令 | myfreax
sudo命令允许您以另一个用户身份运行程序,默认情况下是root用户。如果你在命令行的权限上花了很多时间,sudo就是你经常使用的命令之一

使用你喜欢的文本编辑器,打开文件/etc/ssh/sshd_config。在本教程我们使用vim打开文件/etc/ssh/sshd_config。运行命令vim /etc/ssh/sshd_config

打开SSH配置文件,使用vim搜索以下指令并按如下方式进行修改。完成后保存文件并退出vim,接着重新启动SSH服务。

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
/etc/ssh/sshd_config

如果你使用的是基于Debian的Linux发行版,例如Ubuntu,Linux mint等。运行命令sudo systemctl restart ssh重启SSH服务。

然后安装certutil依赖软件,运行命令sudo apt install wget libnss3-tools

如果你使用的是基于Redhat的Linux发行版,例如CentOS和Fedora等,运行命令sudo systemctl restart sshd重启SSH服务。

在本教程中,您学习了如何设置基于SSH密钥的身份验证,允许您在不提供用户密码的情况下登录到远程服务器。您可以将相同的密钥添加到多个远程服务器。

我们还向您展示了如何禁用SSH密码身份验证并为您的服务器添加额外的安全层。