服务器一上线,24 小时内就会被全网的扫描器盯上。你可以看一下自己的日志:
grep "Failed password" /var/log/auth.log | wc -l很多新机一天能有几百上千条失败登录尝试。只要密码稍微弱一点、或者开了 22 端口对全网开放,被撞库只是时间问题。
这篇讲清楚 SSH 密钥登录的完整配置流程,以及配套的账号加固动作。做完之后,密码爆破对你完全无效。
需要一台服务器来练手?财富云计算 提供云服务器与 NAT 型云服务器(无独立公网 IP,价格比独立 IP 机型省一半以上),后者可通过端口映射方式远程管理,适合做内网服务与游戏服务端。
一、为什么密码登录不安全
- 密码可以被暴力猜:扫描器每秒能试几十次,6 位纯数字密码几分钟就破。
- 密码可能已经泄露:你在别处用过的密码进了社工库,撞库成功率很高。
- 密码会被记录:键盘记录器、共用电脑、截屏,都可能泄露。
- 无法做到不可否认:多人共用 root 密码,出事查不到是谁干的。
密钥登录的原理:本地生成一对密钥(公钥 + 私钥),公钥放服务器,私钥留在自己电脑。登录时服务器用公钥出题,只有持有私钥的人能答对。私钥不上传、不传输,从根本上杜绝了"被猜中"。
二、第一步:本地生成密钥对
在你自己的电脑上执行(不是服务器):
ssh-keygen -t ed25519 -C "yourmail@example.com"输出示例:
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\you/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):- 一路回车即可,也可以给私钥设置一个使用密码(passphrase),这样即使私钥文件泄露,对方还得再破一层。
生成后得到两个文件:
id_ed25519—— 私钥,绝不能给任何人、不能上传服务器、不能发群里。id_ed25519.pub—— 公钥,可以随便放。
如果你的系统比较老不支持 ed25519,用 RSA 4096:
ssh-keygen -t rsa -b 4096 -C "yourmail@example.com"Windows 用户:PowerShell / Windows Terminal 里自带 OpenSSH,可直接用;或者用 Xshell「工具 → 新建用户密钥生成向导」、PuTTYgen 生成。
三、第二步:把公钥传到服务器
方法一:ssh-copy-id(最省事)
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@1.2.3.4按提示输一次密码就完成了。Windows 原生没有这个命令,用方法二。
方法二:手动追加(通用,推荐理解这一步)
先在本地看公钥内容:
cat ~/.ssh/id_ed25519.pub
# 输出形如:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxx yourmail@example.com登录服务器,把它追加进授权文件:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxx yourmail@example.com" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys权限必须对:.ssh 是 700,authorized_keys 是 600。权限太松 SSH 会直接拒绝使用密钥(这是很多人配完还是让输密码的原因)。
方法三:云控制台注入(重装系统时)
不少云厂商(含 财富云计算)在重装/创建实例时支持"注入 SSH 密钥",勾选后系统自动写好 authorized_keys,开机即密钥登录。
四、第三步:验证密钥登录可用(关键!)
别急着关密码登录。 先开一个新的终端窗口测试:
ssh -i ~/.ssh/id_ed25519 root@1.2.3.4能直接进去、不用输服务器密码,说明配置成功。
如果还是提示输密码,按顺序排查:
# 服务器端查看 SSH 日志
tail -f /var/log/auth.log # Debian/Ubuntu
tail -f /var/log/secure # CentOS/Rocky
# 常见报错:Authentication refused: bad ownership or modes
# → 家目录或 .ssh 权限不对,执行:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
chmod g-w ~ && chmod o-w ~同时确认 /etc/ssh/sshd_config 里这几项没被关掉:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys五、第四步:关闭密码登录
确认密钥登录 100% 可用后,再改配置:
sudo nano /etc/ssh/sshd_config找到并修改这几行(有的被 # 注释了,去掉注释再改):
Port 2299 # 改成非 22 的端口,能挡掉大部分无脑扫描
PermitRootLogin prohibit-password # 禁止 root 用密码登录(密钥仍可)
PasswordAuthentication no # 关闭密码认证
PubkeyAuthentication yes
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM no # 部分系统需保留 yes,改完务必测试
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2⚠️ 改 Port 之后,务必先在防火墙/安全组里放行新端口再重启 SSH,否则会把自己关在门外。重启服务:
# Debian/Ubuntu
sudo systemctl restart ssh
# CentOS/Rocky
sudo systemctl restart sshd重启后不要关掉当前窗口,另开一个窗口测试新端口能连上,再断开旧连接。这是保命习惯。
ssh -p 2299 -i ~/.ssh/id_ed25519 root@1.2.3.4六、第五步:建普通用户 + sudo,别再直接用 root
root 权限太大,一个误操作就全盘皆输。推荐做法:
# 新建用户
adduser ops
# 设置密码(虽然关闭密码登录,但 sudo 时还要用)
passwd ops
# 给 sudo 权限(Debian/Ubuntu)
usermod -aG sudo ops
# CentOS/Rocky 是 wheel 组
usermod -aG wheel ops把公钥也部署给这个用户:
mkdir -p /home/ops/.ssh
cp ~/.ssh/authorized_keys /home/ops/.ssh/
chown -R ops:ops /home/ops/.ssh
chmod 700 /home/ops/.ssh
chmod 600 /home/ops/.ssh/authorized_keys然后把 root 登录彻底关掉:
PermitRootLogin no以后就用 ssh ops@1.2.3.4 登录,需要管理员权限时 sudo 命令。
详见本站《Linux 用户与 sudo 权限管理详解》。
七、第六步:上 fail2ban,自动封禁爆破 IP
即使关了密码登录,扫描器还是会浪费你的连接资源。fail2ban 能自动把连续失败的 IP 拉黑:
# Debian/Ubuntu
apt install fail2ban -y
# CentOS
yum install epel-release -y && yum install fail2ban -y
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
nano /etc/fail2ban/jail.local核心配置:
[sshd]
enabled = true
port = 2299 # 改成你的 SSH 实际端口
filter = sshd
logpath = /var/log/auth.log # CentOS 是 /var/log/secure
maxretry = 3
findtime = 600
bantime = 86400 # 封 24 小时systemctl enable --now fail2ban
fail2ban-client status sshd # 查看已封禁的 IP完整玩法见本站《fail2ban 防暴力破解实战配置》。
八、第七步:防火墙只放行必要端口
最小化暴露面,是安全的第一原则:
# Ubuntu(ufw)
ufw allow 2299/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status
# CentOS(firewalld)
firewall-cmd --permanent --add-port=2299/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload注意云平台的安全组是第二道防火墙,两边都要放行才生效。详见本站《Linux 防火墙配置:ufw / firewalld / iptables》。
九、私钥丢了 / 换电脑怎么办
- 有控制台:通过云平台的 VNC / 控制台终端登录(这是留的最后一条后路,也是为什么不建议把控制台也锁死),重新写入新公钥。
- 有其他密钥用户:用另一个还能登录的用户把新公钥写进去。
- 都没了:只能重装系统(所以重要数据一定要做快照/备份)。
私钥管理建议:
- 私钥文件权限设为 600,别放网盘、别发微信。
- 多台服务器可以用同一把公钥,省事。
- 公司/团队场景按人分配密钥,离职就删对应公钥行(在
authorized_keys里一行一个)。 - 给私钥加 passphrase,配合 ssh-agent 免重复输入:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519十、SSH 配置速查表(可直接抄)
| 场景 | 配置 |
|---|---|
| 只许密钥登录 | PasswordAuthentication no、PubkeyAuthentication yes |
| 禁 root 密码登录 | PermitRootLogin prohibit-password |
| 彻底禁 root 登录 | PermitRootLogin no |
| 改端口 | Port 2299(记得防火墙放行) |
| 限制登录用户 | AllowUsers ops alice |
| 限制登录 IP | AllowUsers ops@1.2.3.4 |
| 缩短超时 | ClientAliveInterval 300、ClientAliveCountMax 2 |
| 防反复试探 | MaxAuthTries 3 |
| 闲置自动断开 | ClientAliveInterval 60、ClientAliveCountMax 3 |
改完每次都要:
sshd -t # 语法自检,报错就别重启
systemctl restart sshd十一、常见故障排查
| 现象 | 排查 |
|---|---|
| 配完还是让输密码 | authorized_keys 权限不是 600;家目录权限过松;PubkeyAuthentication 是 no |
Permission denied (publickey) | 公钥内容粘贴不全(注意别换行);-i 指定的私钥不对 |
| 改端口后连不上 | 防火墙/安全组没放行新端口;SELinux 拦截(CentOS 需 semanage port -a -t ssh_port_t -p tcp 2299) |
REMOTE HOST IDENTIFICATION HAS CHANGED | 服务器重装过,删除本地 ~/.ssh/known_hosts 里对应行 |
| 关闭密码登录后被锁 | 走云控制台 VNC,或重装 |
十二、一份最小化的安全清单
上线前花 10 分钟做完这些,能挡掉 95% 的自动化攻击:
- [ ] 改用 SSH 密钥登录,关闭密码认证
- [ ] 改掉默认 22 端口
- [ ] 禁止 root 直接登录,用普通用户 + sudo
- [ ] 装 fail2ban
- [ ] 防火墙只开必要端口
- [ ]
apt update && apt upgrade打齐补丁 - [ ] 重要数据开启自动快照/备份
- [ ] 云控制台密码独立且够强,开二次验证
做游戏开服的,还要额外注意别把 RCON 端口、Steam 查询端口直接暴露给全网,参考本站《游戏服务器安全加固指南》。
想低成本练手这套流程,推荐 财富云计算 的云服务器。只是做内网服务、游戏服务端、练手环境的话,NAT 型云服务器(无独立公网 IP)价格比带独立 IP 的机型省一半以上,配合端口映射即可远程管理,性价比非常高。
相关阅读:
- 《Linux 防火墙配置:ufw / firewalld / iptables》
- 《fail2ban 防暴力破解实战配置》
- 《Linux 用户与 sudo 权限管理详解》
- 《游戏服务器安全加固指南》
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]安全组是云服务器的第一道门:配错了,要么玩家连不上、要么全网都能扫到你。这篇把安全组的原理、配法、排查讲透——从默认规则到最小化实践,从游戏服到网站,全部有现成规则表。需要现成的游戏云服务器,可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,主流游戏都能快速部署,安全组模板已内置。一、安全组是什么安全组是云平台提供的虚拟防火墙,在流量到达你的服务器之前[...]
2026-10-15 回复
[...]sftp> get 远程文件图形工具更顺手:WinSCP(Windows 免费):拖拽传文件FileZilla(全平台):SFTP 协议选「SFTP - SSH File Transfer Protocol」FinalShell / WindTerm(Windows):SSH + 传输一体大文件(存档、镜像包)用对象存储中转更稳,见对象存储分离静态资源。七、NAT 型服务器的连接NAT 型没[...]
2026-10-15 回复
[...]sudo systemctl restart sshd完整教程见SSH 密钥登录与账号安全配置。关键顺序:先确认密钥能登录,再关密码登录——顺序反了会把自己锁在门外。四、第三层:改端口 + 防火墙(把门藏起来)22 端口每秒被扫,改掉它,噪音直接少 90%:# sshd_config 里改端口[...]
2026-10-18 回复
[...]0 3 * tar -czf /backup/site_$(date +\%F).tar.gz /var/www/html -C /backup 2>/dev/null; rclone copy /backup/site_$(date +\%F).tar.gz remote:sitebackup/详细方案见网站迁移完整流程和rsync 同步与定时备份实战。六、安全三件套(小站也要装)[...]
2026-10-18 回复
[...]5. 泄露响应顺序:改密码 → 重启 → 查日志 → 对备份特别提醒群管理场景:把 RCON 密码发给协管时,用「私聊 + 密码管理器分享」而不是「发群里 @他」。群记录是会截图的,密码是会忘的,泄露是会发生的。六、常见疑问Q:RCON 端口开着但不设密码行吗?不行。「不设密码」在很多服务端等于空密码直接进,比弱密码还危险。Q:用 SSH 隧道麻烦吗?一次配置永久受益,而且比公网暴露 RCON 安[...]
2026-10-18 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复