问题

我使用的是 Linode 1GB 并安装了 Ubuntu 14.04 LTS,按照官方的教程做了安全加固措施,如禁止 root 登录、禁止使用密码登录、开启 SSH 公钥登录。

前一段时间重装系统,将自己的私钥删除了,然后就陷入了无法登录的问题。

解决过程

首先想到的是通过 Linode 控制面板登录到机器中,可是登录之后并没有提示输入用户名与密码,而是显示一个程序的输出 Log,也就是说直接登录改设置的方法无效了。

Google 搜索到一篇文章说到可以进入救援模式中并执行一些命令后恢复系统,于是尝试进入救援模式中,直接改文件发现改的是 Finnix 环境的设置,而不是改 VPS 的设置。

按照官网的教程 Rescue and Rebuild,尝试再次进入救援模式并挂接 VPS 的磁盘,官网教程中的路径并不是 Ubuntu 的,所以要稍微修改一下,“/dev/xvda”改为“/dev/sda”,这个地址在 Linode 管理面板的 Rescue 标签下可以看到。

通过管理面板的“Remote Access” -> “Console Access” -> “Lish via Ajaxterm” 进入到 VPS,然后执行以下命令:

1
2
3
4
5
6
7
8
9
mount -o exec,barrier=0 /dev/sda

cd /media/sda
mount -t proc proc proc/
mount -t sysfs sys sys/
mount -o bind /dev dev/
mount -t devpts pts dev/pts/

chroot /media/sda /bin/bash

至此,已经进入到 VPS 环境中了,这时可以修改 SSH 配置文件。

vi /etc/ssh/sshd_config

修改 PasswordAuthentication 选项为 yes

PasswordAuthentication yes

修改 PermitRootLogin 选项为 yes

PermitRootLogin yes

这时再回到 Linode 控制面板,点击 “Dashboard” -> “Reboot” 重启 VPS。

重启完成后即可使用 root 用户登录,增加用户公钥、还原 SSH 配置。

参考资料