1. 首页 > 技术教程 > 正文

彻底告别弱密码:Linux 密钥登录(SSH Key)配置教程

彻底告别弱密码:Linux 密钥登录(SSH Key)配置教程

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

彻底告别弱密码:Linux 密钥登录(SSH Key)配置教程的图片

为什么必须放弃密码登录

密码登录是服务器被入侵的头号入口。每天都有脚本在扫描 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