Linux服务器ssh密钥登录,禁用密码登录加固
很多刚接触Linux服务器的用户习惯用密码登录,但密码容易被暴力破解。
改用SSH密钥登录并禁用密码认证,能大幅提升安全性。
本文从生成密钥对开始,一步步带你完成配置,最后验证并禁用密码登录,适合零基础用户照着操作。
在本地生成密钥对
首先在你的电脑上生成一对密钥:私钥自己保管,公钥上传到服务器。
Windows用户可使用PowerShell或Git Bash,Mac和Linux用户直接打开终端。
执行以下命令(推荐使用ed25519算法,更安全且性能好):
ssh-keygen -t ed25519 -C "your_email@example.com"
按回车后,系统会提示保存路径,直接回车使用默认位置(例如~/.ssh/id_ed25519)。
接着设置一个密码短语(passphrase),可以留空,但建议设置以增加一层保护。
完成后会生成两个文件:id_ed25519(私钥)和id_ed25519.pub(公钥)。
注意:私钥绝不能泄露给他人,公钥可以随意分发。
将公钥上传到服务器
假设服务器IP是192.0.2.1,用户名为root,端口为22。
你可以用ssh-copy-id命令自动上传公钥(如果本地支持):
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@192.0.2.1
输入服务器密码后,公钥会被追加到服务器的~/.ssh/authorized_keys文件中。
如果ssh-copy-id不可用,可以手动复制:
- 查看公钥内容:
cat ~/.ssh/id_ed25519.pub,复制输出。 - 登录服务器:
ssh root@192.0.2.1(输入密码)。 - 创建
.ssh目录并设置权限:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
- 将公钥粘贴到
authorized_keys文件:
echo "粘贴你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
关键点:.ssh目录权限必须是700,authorized_keys文件权限必须是600,否则SSH会拒绝使用密钥。
测试密钥登录
不要关闭当前服务器连接,新开一个终端窗口,尝试用密钥登录:
ssh -i ~/.ssh/id_ed25519 root@192.0.2.1
如果设置了密码短语,会提示输入;
否则直接登录成功。
此时应该不需要输入服务器密码。
如果仍然提示输入密码,说明公钥配置有误,请检查权限和文件路径。
务必确认密钥登录成功后再进行下一步,否则禁用密码后可能把自己锁在外面。
修改SSH配置禁用密码登录
确认密钥登录可用后,在服务器上编辑SSH配置文件:
sudo vi /etc/ssh/sshd_config
找到以下参数并修改(如果前面有#则去掉注释):
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
说明:
PubkeyAuthentication yes:启用密钥认证。PasswordAuthentication no:禁用密码认证。ChallengeResponseAuthentication no:禁用挑战响应认证(某些系统需要)。UsePAM no:如果不禁用PAM,密码登录可能仍然有效,建议关闭。
保存退出后,重启SSH服务:
sudo systemctl restart sshd
或者对于旧系统:
sudo service ssh restart
避坑提示:重启SSH服务不会断开当前已建立的连接,所以你可以保持当前会话,另开终端测试新连接。
如果配置错误导致无法连接,仍可通过当前会话修复。
验证加固效果与常见问题
新开一个终端,尝试用密码登录:
ssh root@192.0.2.1
此时应该直接提示Permission denied (publickey),说明密码登录已被禁用。
再用密钥登录应能正常进入。
如果遇到问题,检查以下方面:
- 服务器防火墙是否放行SSH端口(默认22)。
sshd_config中是否有其他冲突配置,如AllowUsers限制。- 查看SSH日志:
tail -f /var/log/auth.log(Debian/Ubuntu)或/var/log/secure(CentOS/RHEL),根据错误信息调整。
结论:成功禁用密码登录后,服务器只能通过密钥访问,暴力破解密码的攻击将完全失效。
需要保留密码登录作为备用吗?
如果担心密钥丢失,可以临时启用密码登录,但建议仅在紧急情况下使用,并尽快改回。
更安全的做法是备份私钥,并设置强密码短语。
修改端口后密钥登录失效?
如果更改了SSH端口,连接时需指定新端口:ssh -p 新端口 -i 私钥路径 用户@IP。
同时确保防火墙放行新端口。
多用户如何管理?
每个用户独立管理自己的~/.ssh/authorized_keys。
管理员可在sshd_config中通过AllowUsers限制可登录用户。
完成以上步骤后,你的Linux服务器SSH登录就完成了密钥加固。
记得定期备份私钥,并关注系统更新。