先别急着重装
root 密码忘了、sudo 没配、密码管理器里那条记录不知怎么没存上——这种事早晚会发生。动手之前先分清你丢的是哪一种门:
- 只丢了密码:最好办的一种,十分钟能救回来。
- 连 SSH 私钥一起丢了:麻烦得多,但能救。
- 如果你在
sshd_config里写过PermitRootLogin without-password,那台机器根本不接受 root 密码登录,重置密码对你毫无意义;真正要命的是私钥本身。私钥一定要备份到这台机器以外的地方。
第一条路:面板里直接改
先去商家的控制面板找“重置 root 密码”这类按钮,SolusVM、Virtualizor 这类面板基本都内置了——毕竟帮客户改密码是工单里最常见的请求。点完通常要重启一次才生效。这条路走通,下面就不用看了。
第二条路:进救援模式
面板没这功能,或者连私钥都没了,就上救援镜像。
- 在面板里启用救援模式,等它启动完。
- 登录时加上两个参数:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@你的IP
救援镜像是另一套系统,主机密钥变了,不加这两个参数会被 known_hosts 挡在门外,还会弹出那句吓人的警告。这样只是临时绕过,别顺手把自己的 known_hosts 改了。
- 先确认你在哪儿:
cat /etc/hostname
输出是 rescue 说明你还站在救援镜像里,这时候执行 passwd 改的是救援环境的密码,白改。
- 找出真正的根分区:
mount | grep "on / "
lsblk -f
两个命令交叉看:救援环境自己占一个分区,你的真实系统盘是另一个。
- 挂上并切进去:
mount /dev/vda1 /mnt
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount --bind /run /mnt/run
chroot /mnt /bin/bash
那几个 --bind 不是可选项,少了它们 passwd 一类的命令在 chroot 里会表现得莫名其妙。分区名按你上一步 lsblk -f 的实际输出替换,别照抄。
- 改密码、退出、重启:
passwd
exit
reboot
重启前再 cat /etc/hostname 确认一下,机器名变回你自己的,说明你确实站在原系统里。开机后回面板确认救援模式已关闭、机器从硬盘正常启动。
更该提前做的三件事
- 买机器之前就确认两件事:面板能不能自助重置 root 密码、有没有救援镜像入口。年付十几美元的小商家经常两样都没有,真出事只能重装,数据全清。这两条比 CPU 型号更该进你的选型清单。
- 建一个带 sudo 的普通用户,别所有事都用 root。
- 私钥和密码都丢进密码管理器,私钥再留一份在这台机器之外。
这套命令我没在你的机器上跑过,分区编号、文件系统、面板入口各家都不一样,动手前照着 lsblk -f 的输出核对一遍再执行。
登录 后参与评论