云服务器换成:密钥登录 + 禁密码登录(防暴力破解)
(1)本地生成密钥对:
* 先判断自己电脑确认有没有 OpenSSH,打开 cmd/powershell 都可以,执行:
ssh -V
如果输出类似 OpenSSH_for_Windows_8.x → 有,直接往下走。
如果提示"不是内部或外部命令" → 去 设置 → 应用 → 可选功能 → 添加功能 → OpenSSH 客户端,装完重开终端。
* 在自己本地生成密钥对。
# 后面的 doublepin@downin 随便取,一般是:应用名称@邮箱 ssh-keygen -t ed25519 -C "doublepin@downin"
回车后会问你:
Enter file in which to save the key → 直接回车(默认存到 C:\Users\你的用户名\.ssh\id_ed25519)
Enter passphrase → 建议设一个(比如 DpKey#2026),这样即使私钥被盗,别人也用不了。不想设就直接两次回车跳过。
生成完后,.ssh 目录下会有两个文件:
id_ed25519 → 私钥,永远别给别人
id_ed25519.pub → 公钥,要放到服务器上
* 确认一下:
type C:\Users\你的用户名\.ssh\id_ed25519.pub
能看到一行以 ssh-ed25519 开头的文字,就是公钥内容。
(2)把公钥推送到服务器
方式一:有 ssh-copy-id(部分 Win11 自带)
ssh-copy-id root@服务器公网IP
输入一次服务器 root 密码,它会自动把公钥追加到服务器的 ~/.ssh/authorized_keys 里。
方式二:手动操作
1、先看看本地公钥内容:
type C:\Users\你的用户名\.ssh\id_ed25519.pub
全选复制那一行。
2、使用其他工具,比如 xshell 登录云服务器,在服务器上执行
mkdir -p ~/.ssh chmod 700 ~/.ssh vi ~/.ssh/authorized_keys
把刚才 1 复制的那一行,粘贴进去,然后保存退出
3、设权限(这步必须做,否则密钥不生效):
chmod 600 ~/.ssh/authorized_keys
(3)验证密钥登录是否能通,再关闭密码登录
1、新开一个 Win11 命令行窗口,执行:
ssh root@服务器公网IP
如果设了 passphrase → 提示输入密钥密码,输入后登入成功
如果没设 passphrase → 直接登入成功
能登进去 = 密钥生效了。 如果还是提示输入 root 密码,说明公钥没放对位置或权限不对,回去检查第二步。
(4)确认无误后,禁用密码登录
在服务器 xshell 这边的命令行里面:
vi /etc/ssh/sshd_config
找到或直接在文件末尾加:
# 禁用密码登录
PasswordAuthentication no
# 禁用空密码
PermitEmptyPasswords no
# 确保密钥登录是开的(默认就是 yes,确认一下)
PubkeyAuthentication yes
保存退出,然后先测试配置文件有无语法错误:
sshd -t
没输出 = 配置正确。有报错就按提示修。
重启 sshd:
systemctl restart sshd
(5)最终验证
本地重开一个 cmd/powershell 窗口
ssh root@服务器公网IP
应该直接进(或只问密钥密码),不再要 root 密码。
(6)可选加固(锦上添花)
vi /etc/ssh/sshd_config
追加
# 禁止 root 直接登录(改用普通用户 + sudo)
# PermitRootLogin no
# 如果你暂时还想用 root 登录就别加这行,等熟悉了再加
# 限制允许登录的用户(比如只允许 dp 这个用户)
# AllowUsers dp

浙公网安备 33010602011771号