如何设置无密码的SSH登录
Secure 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密钥对,并将你的电子邮件地址作为注释:
ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"
按
Enter
,接受默认的文件位置和文件名:输出
Enter file in which to save the key (/home/yourusername/.ssh/id_rsa):
接下来,
ssh-keygen
工具会要求你输入一个安全口令。你是否要使用口令由你决定,如果你选择使用口令,你将得到一个额外的安全层。在大多数情况下,开发人员和系统管理员使用没有口令的SSH,因为他们对完全自动化的过程很有用。如果你不想使用口令就按Enter
。输出
Enter passphrase (empty for no passphrase):
整个互动过程看起来是这样的:
为了确定SSH密钥已经生成,你可以用以下方法列出你的新的私人和公共密钥:
ls ~/.ssh/id_*
输出
/home/yourusername/.ssh/id_rsa /home/yourusername/.ssh/id_rsa.pub
拷贝公钥
现在你已经生成了一个SSH密钥对,为了能够在没有密码的情况下登录到你的服务器,你需要把公钥复制到你要管理的服务器上。
将你的公钥复制到你的服务器的最简单方法是使用一个叫做
ssh-copy-id
的命令。在你的本地机器终端键入:ssh-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 && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
使用SSH密钥登录到你的服务器上
在完成上述步骤后,你应该能够登录到远程服务器,而不会被提示输入密码。
要测试它,只需尝试通过SSH登录到你的服务器上:
ssh remote_username@server_ip_address
如果一切顺利,你将会立即被登录。
禁用SSH密码验证功能
为了给你的服务器增加一个额外的安全层,你可以禁用SSH的密码验证。
在禁用SSH密码认证之前,请确保你可以在没有密码的情况下登录你的服务器,而且你登录的用户有sudo权限。
下面的教程描述了如何配置sudo访问权限:
用SSH密钥登录到你的远程服务器,可以是具有sudo权限的用户,也可以是root:
ssh sudo_user@server_ip_address
打开SSH配置文件
/etc/ssh/sshd_config
,搜索以下指令,并按以下方式进行修改:/etc/ssh/sshd_configPasswordAuthentication no ChallengeResponseAuthentication no UsePAM no
一旦你完成后,保存文件并重新启动SSH服务。
在Ubuntu或Debian服务器上,运行下面的命令:
sudo systemctl restart ssh
在CentOS或Fedora服务器上,运行下面的命令:
sudo systemctl restart sshd
总结
在本教程中,你已经学会了如何设置一个基于SSH密钥的认证,允许你在不提供用户密码的情况下登录到远程服务器。你可以为多个远程服务添加相同的密钥。
我们还向你展示了如何禁用SSH密码认证,并为你的服务器增加一个额外的安全保护层。
如果你有任何问题或反馈意见,请随时留言。