安全shell (ssh )是用于客户端和服务器之间安全连接的加密网络协议,支持多种验证机制。 基于密码的认证和基于公钥的认证是目前最流行的两种认证机制。
本教程介绍如何设置基于SSH密钥的认证,以及如何在不输入密码的情况下连接到Linux服务器。
设置无SSH密码登录
要在Linux上设置SSH安全登录,只需生成公共认证密钥并将其附加到远程主机~/.ssh/authorized_keys文件中。
以下过程介绍了设置SSH安全登录的过程。
检查现有的SSH密钥对。
在生成新的SSH密钥对之前,首先检查客户端计算机上是否已经有SSH密钥。 这是因为不想复盖现有密钥。
运行以下ls命令以确定是否存在现有的SSH密钥:
ls -al ~/.ssh/id_*.pub
如果有现有密钥,可以使用这些密钥跳过下一步或备份旧密钥来生成新密钥。
如果显示No such file or directory或no matches found,表示没有SSH密钥,则可以继续执行下一步以生成新密钥。
生成新的SSH密钥对。
以下命令生成新的4096位SSH密钥对,并注释电子邮件地址。
sh-keygen-trsa-b 4096-c ' your _ email @ domain.com '
按Enter接受后,默认文件位置和文件名:
enterfileinwhichtosavethekey (/home/your username/. ssh/id _ RSA ) :
然后,ssh-keygen工具会提示您输入安全密码。 是否使用密码短语取决于你。 如果选择使用密码短语,将获得额外的安全性。 在大多数情况下,开发人员和系统管理员使用SSH而不是密码。 这是因为它有助于完全自动化的过程。 如果不想使用密码短语,请按Enter
enter pass phrase (emptyfornopassphrase ) :
整个交互看起来是这样的:
要验证是否生成了SSH密钥,请使用以下命令列出新的私钥和公钥:
ls ~/.ssh/id_*
/home/your username/. ssh/id _ RSA/home/your username/. ssh/id _ RSA.pub
复制公钥
现在已生成SSH密钥对。 要在没有密码的情况下登录服务器,必须将其复制到管理公钥的服务器上。
将公钥复制到服务器的最简单方法是使用命令ssh-copy-id。 您的本地计算机的终端类型:
sh-copy-id remote _ username @ server _ IP _ address
系统将提示您输入remote_username的密码。
remote _ username @ server _ IP _ address ' s password :
用户经过认证后,公钥将附加到远程用户的authorized_keys文件中,并关闭连接。
如果由于某种原因,ssh-copy-id本地计算机上没有实用程序,可以使用以下命令复制公钥:
cat~~/. ssh/id _ RSA.pub|ssh remote _ username @ server _ IP _ address ' mkdir-p (/. ssh cat )/. ssh/authouthoud
使用SSH密钥登录服务器
完成上述步骤后,您应该可以登录远程服务器,而无需输入密码。
要测试这一点,请尝试通过SSH登录服务器。
sh remote _ username @ server _ IP _ address
如果顺利的话,我马上登录。
禁用SSH密码认证
要向服务器添加安全层,请禁用SSH密码验证。
禁用SSH密码验证之前,请确保您可以在不使用密码的情况下登录到服务器,并且登录的用户具有sudo权限。
使用具有sudo权限的用户或根用户,使用SSH密钥登录远程服务器。
ssh sudo_user@server_ip_address
打开SSH配置式/etc/ssh/sshd_config,搜索以下命令并修改以下内容:
PasswordAuthentication no
challengeresponseauthenticationno
UsePAM no
完成后保存文件,然后重新启动SSH服务。
在Ubuntu或Debian服务器上,执行以下命令:
sudo systemctl restart ssh
在CentOS或Fedora服务器上,执行以下命令:
sudo系统重新启动固态硬盘
结论
在本教程中,您学习了如何设置基于SSH密钥的认证,以便无需输入用户密码即可登录远程服务器。 可以将同一密钥添加到多个远程服务中。
本指南还介绍如何禁用SSH密码验证并将安全层添加到服务器。
如果有问题或反馈,请在下面留言。