Linux ssh密钥登录禁用密码
为什么要禁用SSH密码登录
使用密码登录SSH存在被暴力破解的风险。
配置SSH密钥登录后,只有持有私钥的设备才能连接服务器,同时彻底禁用密码,能极大提升安全性。
本文教你从零开始完成“Linux ssh密钥登录禁用密码”的全过程。
前置准备
- 本地电脑(Windows/macOS/Linux)上已有SSH客户端(Windows建议使用PowerShell或Git Bash)。
- 一台Linux服务器(本文以Ubuntu 20.04为例,CentOS同样适用),确保已开通SSH端口(默认22)。
- 服务器端已有root或sudo权限。
第一步:在本地生成SSH密钥对
打开本地终端(Windows打开PowerShell或CMD),执行:
ssh-keygen -t ed25519 -C "你的邮箱或备注"
- 按回车确认默认路径(
~/.ssh/id_ed25519)。 - 提示输入密码短语(passphrase)时可留空直接回车,或者设置一个额外保护。
- 执行完成后,本地
~/.ssh/目录下会生成两个文件:id_ed25519(私钥,请勿泄露)和id_ed25519.pub(公钥,需上传到服务器)。
第二步:将公钥上传到服务器
使用 ssh-copy-id 命令将公钥复制到服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub 用户名@服务器IP
- 输入当前密码完成验证,公钥会自动追加到服务器上对应用户的
~/.ssh/authorized_keys文件中。 - 如果没有
ssh-copy-id,可用手动方式:将id_ed25519.pub内容粘贴到服务器~/.ssh/authorized_keys(一行一条)。
第三步:测试密钥登录
在本地执行:
ssh 用户名@服务器IP
如果不需要密码直接登录,说明密钥认证生效。注意:此时密码登录仍开启,请先保留一个已连接的会话,避免配置错误后无法登录。
第四步:禁用密码登录
使用root或sudo权限编辑SSH配置文件:
sudo vim /etc/ssh/sshd_config
找到并修改以下参数:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
- 保存退出(
:wq)。 - 重启SSH服务:
sudo systemctl restart sshd
(CentOS使用 systemctl restart sshd,部分旧版用 service ssh restart)
关键避坑提醒
- 始终保留一个登录会话:修改配置后不要关闭当前的SSH连接,先另开一个终端测试新连接能否成功。如果失败,用原会话恢复配置。
- 防火墙和安全组:确保服务器的防火墙或云服务商安全组放行了SSH端口(22)。禁用密码后如果密钥认证失效,你可能完全无法登录。
- 多个用户:如果你需要对多个用户禁用密码,每个用户都需要在自己目录下配置
authorized_keys。修改PasswordAuthentication no后,所有用户都将无法使用密码登录。 - 恢复访问:如果误操作导致无法登录,可通过服务器提供商的控制台VNC或救援模式进入系统,将
/etc/ssh/sshd_config中的PasswordAuthentication改回yes并重启SSH。
效果验证
- 在本地尝试使用密码登录:
ssh -o PreferredAuthentications=password 用户名@服务器IP,应该返回Permission denied (publickey)。 - 正常使用密钥登录应无阻碍。
- 查看SSH日志确认:
sudo journalctl -u sshd -n 20,可看到Accepted publickey记录。
常见问题(FAQ)
Q:修改配置后无法登录怎么办?
A:使用服务器控制台VNC或救援模式,修改回 PasswordAuthentication yes,重启SSH后再检查密钥配置。
Q:可以同时保留密码登录和密钥登录吗?
A:可以,但安全建议是禁用密码。如果必须保留,设置 PasswordAuthentication yes 并配合强密码。
Q:ssh-copy-id 提示权限错误?
A:检查服务器上 ~/.ssh 目录权限应为 700,authorized_keys 权限为 600。使用 chmod 修正。
Q:Windows用户没有 ssh-copy-id 怎么办?
A:手动复制公钥内容,登录服务器后执行 echo "公钥内容" >> ~/.ssh/authorized_keys。
完成以上步骤,你就成功实现了Linux SSH密钥登录并禁用了密码。
下次登录只需密钥,无需再输入密码,服务器安全性大幅提升。