禁用root远程登录:安全基线

VPS到手第一件事:禁用root远程登录。小够教你密钥登录+新建用户+改SSH端口,堵住最常见的入侵口。跟着做就行,够用不折腾。

我是小够,只推够用的 VPS。

VPS 刚到手,公网 IP 就暴露在全世界的扫描器面前。每天有无数机器在爆破 SSH:root 账户 + 弱密码,几分钟就可能被拿下。禁用 root 远程登录,是每台 VPS 的安全基线,10 分钟配置,挡住 90% 的自动化攻击。

为什么 root 这么危险

root 是 Linux 的最高权限用户,每个系统都有,用户名永远是"root"。攻击者不需要猜用户名,只需要猜密码。更糟的是,很多人图省事,root 密码设得简单,或者多个机器用同一个密码。

一旦 root 被爆破,攻击者拿到的是整台机器:装木马、挖矿、删数据、拿你的机器当跳板攻击别人。到时候封的可能是你的 IP,背锅的是你。

禁用 root 远程登录的逻辑很简单:让攻击者连用户名都要猜。新建一个普通用户,只允许它登录,root 只能从机器内部切换。这样自动化爆破的成功率直接归零。

四步配置(按顺序做)

第一步:新建普通用户

adduser xiaogou          # 用户名换成你自己的,别用 admin/test 这种
usermod -aG sudo xiaogou # 给 sudo 权限

设一个强密码。以后日常操作都用这个用户,需要 root 权限时 sudo 提权。

第二步:配置密钥登录

密码再强也怕爆破,密钥才是正解。在你自己的电脑上生成密钥:

ssh-keygen -t ed25519 -C "[email protected]"

一路回车(可以设密钥密码,更安全)。然后把公钥传到 VPS:

ssh-copy-id xiaogou@你的VPS_IP

传完之后,测试密钥登录能成功:

ssh xiaogou@你的VPS_IP

不用输密码直接进,说明密钥生效了。这一步必须确认成功,再做下一步,否则你会把自己锁在门外。

第三步:禁用 root 登录 + 禁用密码登录

确认密钥登录没问题后,改 SSH 配置:

sudo vim /etc/ssh/sshd_config

找到(或添加)这几行:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

PermitRootLogin no:root 不能远程登录。PasswordAuthentication no:禁用密码登录,只认密钥。改完重启 SSH:

sudo systemctl restart sshd

注意:不同发行版的 SSH 服务名可能是 ssh 或 sshd,systemctl restart sshd 不行就试 systemctl restart ssh。

第四步:改 SSH 端口(可选但推荐)

默认 22 端口是扫描器的重点照顾对象,改成高位端口(比如 2222、20000+),能过滤掉 99% 的无脑扫描:

Port 2222

同样在 sshd_config 里改,重启服务。改完之后登录要加端口:

ssh -p 2222 xiaogou@你的VPS_IP

别忘了防火墙放行新端口、关闭 22 端口:

sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp

改完怎么验证

开一个新的终端窗口(别关旧的,旧窗口是你的救命稻草),测试:

  1. ssh root@你的VPS_IP → 应该被拒绝。
  2. ssh -p 2222 xiaogou@你的VPS_IP → 密钥直接登录成功。
  3. 用密码登录 → 应该被拒绝。

三项都通过,旧窗口才能关。万一配错了,用旧窗口改回来。这条"别关旧窗口"是血泪教训,每年都有人把自己锁外面,然后花一下午找商家开 VNC。

进阶:fail2ban 自动封禁

改了端口、禁了密码,基本已经安全。但想更进一步,装 fail2ban:自动封禁频繁试错的 IP。

sudo apt install fail2ban
sudo systemctl enable --now fail2ban

默认配置就能用:5 分钟内失败 5 次,封 10 分钟。配合改端口,扫描器基本绝迹。日志在 /var/log/fail2ban.log,偶尔看一眼被封了多少 IP,还挺解压。

想自定义规则,建 /etc/fail2ban/jail.local,比如把封禁时间加长、把 SSH 端口改成你自定义的端口。fail2ban 认的是日志里的失败记录,端口改了要在配置里同步,不然它还在盯着 22 端口。

密钥丢了怎么办

这是密钥登录唯一的软肋:私钥丢了 = 钥匙丢了。预防措施:

  • 私钥备份:~/.ssh/id_ed25519 拷一份到密码管理器或加密 U 盘,别只放一台电脑。
  • 多设备各用各的密钥:办公电脑、家里电脑各生成一对,VPS 上authorized_keys 里加多个公钥,丢一个删一个,不影响其他。
  • 真丢了:通过商家后台的 VNC/控制台登录(这是物理键盘,不走 SSH),重新传公钥。各大商家都提供这个功能,买机器时确认有就行。

多说一句:密钥到底是什么原理

很多人配了密钥,但不知道为啥它比密码安全。30 秒讲清:

密钥是一对:公钥(放 VPS 上,公开的)和私钥(放你电脑上,保密的)。登录时,VPS 用公钥出道题,只有你的私钥能解出来。攻击者没有私钥,题目再简单也解不出来。

密码是"你知道的秘密",可以被猜、被撞库、被钓鱼。密钥是"你拥有的东西",2048 位以上的随机数,宇宙毁灭也猜不出来。这就是为什么禁用密码、只留密钥后,爆破攻击直接失效——攻击面从"猜"变成了"偷",难度差了几个数量级。

所以私钥的保管是整个体系里最重要的一环:设密钥密码(双保险)、备份、多设备分开。公钥丢了没事,私钥丢了是大事。

多人协作场景

如果你和朋友/同事共用一台 VPS,别共用一个账号:

  1. 每人建自己的用户,各配各的密钥。
  2. 需要 root 权限的,进 sudo 组;不需要的,普通用户。
  3. 有人退出项目,直接删他的用户和公钥,一秒回收权限。
sudo userdel -r 离职同事的用户名  # 连家目录一起删

这比"改 root 密码然后通知所有人"靠谱得多。root 密码知道的人越少越好,理想状态是:没人日常用 root,包括你自己。

常见报错排查

“Permission denied (publickey)”:密钥没配对。检查:公钥是不是传到正确的用户家目录、.ssh 目录权限是不是 700、authorized_keys 是不是 600、sshd_config 里 PubkeyAuthentication 是不是 yes。

“Connection refused”:SSH 服务没起,或端口不对,或防火墙没放行。用商家 VNC 进去看 systemctl status sshd。

改完端口连不上:99% 是防火墙忘了放行新端口。用 VNC 进去,ufw allow 新端口/tcp,再试。

把自己锁外面了:别慌,用商家后台的 VNC/控制台登录(走的是虚拟机显示器,不走 SSH),改回配置。各大商家都有这个功能,这是你最后的救命绳。买机器时顺手确认 VNC 可用,关键时刻能救命。

小够的安全基线清单

新 VPS 到手,按这个顺序走一遍,半小时搞定:

  • 新建普通用户,给 sudo
  • 密钥登录配好,测试成功
  • 禁用 root 远程登录
  • 禁用密码登录
  • SSH 改高位端口
  • 防火墙只开放必要端口
  • 装 fail2ban
  • 私钥备份到安全的地方

做完这套,你的 VPS 已经比 90% 的裸奔机器安全。安全没有一劳永逸,但基线打好了,后面都是加分项。记住顺序:先不断网验证,再关旧窗口,这是整篇最重要的操作纪律。宁可多花五分钟验证,也别花五小时找商家开 VNC 救机器。安全基线这半小时,是你这台 VPS 最值钱的半小时。下一篇可以看端口扫描自查,确认没多开的门。