彻底告别弱密码:Linux 密钥登录(SSH Key)配置教程
别再用 123456 了。主机选这篇 Linux 教程直接解决 SSH 暴力破解问题——用密钥登录取代密码,一次配置永久安心。

为什么必须放弃密码登录
密码登录是服务器被入侵的头号入口。每天都有脚本在扫描 22 端口,尝试 root/admin/123456 这些弱口令。哪怕你设的是 `Passw0rd!`,在字典攻击面前也撑不过 30 秒。
密钥登录的原理是:客户端持有私钥,服务器存公钥。只有私钥能匹配公钥,网络传输中不暴露任何密码。就算被嗅探,攻击者也拿不到凭证。
环境准备:检查 SSH 和系统版本
操作前确认两个前提:
1. 你有服务器 root 权限或 sudo 权限。
2. 本地电脑有终端(Windows 用 PowerShell 或 Git Bash,macOS/Linux 直接开终端)。
检查 SSH 版本(OpenSSH 6.5 以上都支持密钥登录)
ssh -V
输出示例:OpenSSH_8.9p1, OpenSSL 3.0.2
如果版本过低,建议先升级。别问为什么,旧版密钥算法有漏洞。
生成密钥对:本地电脑操作
这一步在你自己的电脑上执行,不是在服务器。
生成 RSA 4096 位密钥
-t 指定算法(rsa),-b 指定位数(4096 更安全),-C 加个注释方便识别
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
回车后提示输入保存路径,默认 `~/.ssh/id_rsa`。建议直接回车,别改路径,否则后面配置容易乱。
接着让你设置 passphrase(密码短语)。这是给私钥再加一层保护,不是必须,但强烈建议设。万一私钥泄露,没有 passphrase 也打不开。
text
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
生成完成后,检查文件:
ls -la ~/.ssh/
应该看到 id_rsa(私钥)和 id_rsa.pub(公钥)
老鸟叮嘱:私钥权限必须 600
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
权限不对 SSH 直接拒绝使用,报错 `Permissions 0644 for 'id_rsa' are too open`。别问为什么,照着做就行。
上传公钥到服务器
公钥需要放到服务器 `~/.ssh/authorized_keys` 文件里。有几种方法,推荐最稳的一种。
方法一:ssh-copy-id(推荐)
把公钥复制到远程服务器,假设 IP 是 192.168.1.100,用户是 root
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.100
输入一次密码,脚本自动把公钥追加到服务器 `~/.ssh/authorized_keys`。这是最不容易翻车的方式。
方法二:手动追加(万一 ssh-copy-id 报错)
先在本地把公钥打印出来
cat ~/.ssh/id_rsa.pub
复制输出内容
SSH 登录服务器,执行:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "你复制的那串公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
权限必须对:`.ssh` 目录 700,`authorized_keys` 文件 600。
测试密钥登录
上传完成后,先不要关当前 SSH 会话。另开一个终端测试:
ssh -i ~/.ssh/id_rsa root@192.168.1.100
如果一切正常,直接登录成功,不需要密码。如果让你输密码,说明公钥没配好,检查上一步。
万一报错了别慌,常见错误处理:
• `Permission denied (publickey)`:公钥没正确追加,或权限不对。
• `Connection refused`:SSH 服务没启动,或端口不是 22。
• `Bad owner or permissions`:私钥权限不是 600。
禁用密码登录(关键一步)
测试密钥登录成功后,才去关闭密码登录。顺序千万别搞反,否则你会把自己锁在外面。
备份配置文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
编辑 SSH 配置
vim /etc/ssh/sshd_config
找到下面三行,改成:
text
PasswordAuthentication no # 禁止密码登录
PubkeyAuthentication yes # 开启密钥登录(默认就是 yes)
ChallengeResponseAuthentication no # 关闭挑战响应认证
改完后重启 SSH 服务:
systemctl restart sshd
或者 service sshd restart(CentOS 6 等旧系统)
老鸟叮嘱:永远保留一个备用登录方式
如果你在远程操作,务必在另一个终端保持一个已登录会话。万一配置错了,还能回去改。否则只能去机房或找服务商挂载救援模式。
排障指南:密钥登录常见问题
1. 密钥登录成功但被要求输入密码
检查 `~/.ssh/authorized_keys` 是不是有换行问题,或者权限不对。用 `tail -n 1 ~/.ssh/authorized_keys` 确认公钥完整。
2. 禁用密码登录后无法登录
如果还开着另一个 SSH 会话,赶紧回去改回来。如果没有备用会话,只能通过 VNC 或 IPMI 进系统,或者找服务商挂载救援模式。
3. 多台服务器的密钥管理
可以生成多对密钥,用 `-i` 指定不同私钥。或者把公钥追加到所有服务器的 `authorized_keys`,用同一把私钥登录所有机器。
FAQ:用户真实搜索问题
Q:Linux SSH 连不上怎么办?
先检查网络连通性(ping),再检查 SSH 服务状态(`systemctl status sshd`),然后看防火墙是否放行了 22 端口。如果配置了密钥登录但没关密码,确认公钥是否在 `authorized_keys` 中。
Q:VPS 防火墙端口放行后还是访问不了是什么原因?
可能是 iptables 规则冲突,或者云服务商的安全组没放行。先检查 `iptables -L -n` 看看是否有 DROP 规则,再登录云控制台检查安全组。
Q:Linux 小白可以直接用 root 账号操作吗?
不建议。日常操作用普通用户加 sudo,密钥登录也建议用普通用户。root 权限太大,一个 `rm -rf /` 就完蛋。实在要用,至少给 root 设一个强密码+密钥双因子认证。
Q:BBR 开启后为什么速度没有明显提升?
BBR 只优化 TCP 拥塞控制,如果你的网络瓶颈在带宽不足、丢包率高或服务器性能差,BBR 效果有限。用 `iperf3` 测一下真实吞吐量再判断。
Q:密钥文件丢失怎么办?
私钥丢了,任何服务器都登不上。备份私钥到安全的地方(比如加密 U 盘或密码管理器)。如果真丢了,只能通过救援模式或服务商控制台重置 SSH 配置。
Q:配置密钥后还能用密码登录吗?
如果你按教程关闭了 `PasswordAuthentication no`,就不能了。建议关闭,除非你有特殊需求(比如用密码做第二认证)。
—
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9517.html 商家投稿邮箱:zhujixuanblog@qq.com
