SSH全称Secure Shell是一种加密网络协议,用于客户端和服务器之间的安全连接,并支持各种身份验证机制。两种最流行的机制是基于密码的身份验证和基于公钥的身份验证。
在本教程中,我们将向您展示如何设置基于SSH密钥的身份验证以及如何在不输入密码的情况下连接到Linux服务器。
要在Linux中设置SSH无密码登录,您只需生成SSH的公钥并将其添加到远程主机或者服务器的~/.ssh/authorized_keys
文件即可。
在生成新的SSH密钥对之前,首先检查您的客户端计算机上是否已有SSH密钥,您可能不想覆盖现有SSH密钥对。
你可运行ls -al ~/.ssh/id_*.pub
命令以查看是否存在SSH密钥。如果存在现有密钥,您可以使用这些密钥并跳过下一步或备份旧密钥并生成新密钥。
如果您看到No such file or directory
或no 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用户。
使用你喜欢的文本编辑器,打开文件/etc/ssh/sshd_config
。在本教程我们使用vim打开文件/etc/ssh/sshd_config
。运行命令vim /etc/ssh/sshd_config
。
打开SSH配置文件,使用vim搜索以下指令并按如下方式进行修改。完成后保存文件并退出vim,接着重新启动SSH服务。
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
如果你使用的是基于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密码身份验证并为您的服务器添加额外的安全层。