使用密钥登录(Public Key Authentication)相比密码登录,能有效抵御暴力破解攻击。本文将让你从零开始完成设置。
第一步:本地生成密钥对
在你的 本地电脑(Windows PowerShell、macOS 或 Linux 终端)执行:
ssh-keygen -t ed25519 -C "your_email@example.com"
- 提示保存路径:直接按回车(默认路径
~/.ssh/id_ed25519)。 - 提示输入密码 (Passphrase):可选。如果输入了,每次使用密钥时需输入此密码(额外保护)。
- 结果:你将获得两个文件:
id_ed25519:私钥,绝对不能泄露给任何人。id_ed25519.pub:公钥,稍后上传到服务器。
第二步:在服务器配置公钥
如果服务器是全新的,可能不存在 .ssh 目录。
1. 手动创建环境
在 服务器 上执行:
mkdir -p /root/.ssh
chmod 700 /root/.ssh
touch /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
2. 写入公钥内容
使用编辑器打开文件:
nano /root/.ssh/authorized_keys
将本地电脑生成的 id_ed25519.pub 文件中的 全部内容 粘贴进去,保存退出(先Ctrl+O,再 Enter,最后 Ctrl+X退出)。
第三步:修改 SSH 配置文件
这是最关键的一步,决定了服务器是否接受密码登录。
执行命令:
nano /etc/ssh/sshd_config
在文件中找到并确保以下参数按如下设置(若有 # 请删掉):
| 配置项 | 设置值 | 说明 |
|---|---|---|
PubkeyAuthentication | yes | 允许使用公钥登录 |
PasswordAuthentication | no | 禁止使用密码登录 |
KbdInteractiveAuthentication | no | 禁用键盘交互认证(现代版挑战响应验证) |
注:在旧版教程中常见的ChallengeResponseAuthentication在 Ubuntu 22.04 中已更名为KbdInteractiveAuthentication。
第四步:测试并重启服务
1. 语法检查
在应用配置前,检查是否有拼写错误:
sshd -t
若无任何输出,说明配置合法。
2. 重启 SSH 服务
systemctl restart ssh
3. 极其重要:双重验证
不要关闭当前的 SSH 窗口! 1. 在本地电脑新开一个窗口尝试连接:ssh root@服务器IP。
- 如果无需密码直接进入(或仅提示输入密钥密码),说明成功。
- 如果新窗口能进去,你就可以放心关闭旧窗口。
常见问题排查 (FAQ)
- 报错 "Permission denied":通常是
/root、.ssh目录或authorized_keys文件的权限权限过大导致。请严格执行上述的chmod命令。 - 误操作锁死怎么办?:
如果你禁用了密码且密钥没配好,你只能通过云服务商提供的 VNC 控制台 登录,将PasswordAuthentication改回yes救急。
这样完成后,你就能放心使用了
上文如有欠缺,请大佬拍砖指正,我一定立正聆听并修改