如何绕过密钥认证SSH登录Vagrant创建的本地Linux服务器
第一步:修复虚拟机启动报错
- 先关闭宿主机虚拟化冲突程序:如果开启了Hyper-V、WSL2、Docker Desktop,会和VirtualBox硬件虚拟化冲突。Windows系统可执行管理员权限命令提示符,运行
bcdedit /set hypervisorlaunchtype off,重启宿主机后重试。Mac系统需先退出Parallels等其他正在运行的虚拟机程序再操作。 - 重置虚拟机配置:打开VirtualBox图形界面,找到对应的default虚拟机,右键点击「设置」,检查内存分配是否超过宿主机可用内存、虚拟磁盘文件是否被误删,修正异常配置后手动点击VirtualBox内的启动按钮,跳过Vagrant启动流程测试。
第二步:绕过SSH直接登录系统修改配置
只要虚拟机可以正常启动,无需走SSH通道即可修改配置:
- 虚拟机启动后,在VirtualBox弹出的控制台窗口直接输入student或root用户的原有密码登录,本地控制台登录不受SSH服务配置限制。
- 登录后执行
sudo nano /etc/ssh/sshd_config,将PasswordAuthentication参数改回yes,保存后执行sudo service ssh restart重启SSH服务,即可恢复密码登录能力。 - 若忘记用户密码,可在虚拟机启动时按Shift调出Grub引导菜单,选择高级选项中的recovery mode,进入root shell后执行
passwd student重设student用户密码,再修改SSH配置即可。
第三步:修复原有SSH配置缺陷
你之前仅配置了student用户的公钥,未同步配置vagrant用户的公钥,所以vagrant用户登录会失败:
- 登录系统后执行
cd /home/vagrant,创建.ssh目录和authorized_keys文件,对应设置权限为chmod 700 .ssh、chmod 644 .ssh/authorized_keys,将本地公钥内容粘贴进vagrant用户的authorized_keys文件即可。 - 也可以在
sshd_config末尾添加规则单独给vagrant用户开放密码登录:
保存后重启SSH服务即可。Match User vagrant PasswordAuthentication yes
应急方案
如果仅需要读取/修改虚拟机内的文件,无需启动系统:使用VirtualBox的虚拟磁盘挂载工具,将虚拟机对应的vdi格式磁盘直接挂载到宿主机,直接编辑内部的/etc/ssh/sshd_config文件,修改完成后卸载磁盘再启动虚拟机即可恢复SSH登录能力。
内容的提问来源于stack exchange,提问作者Kaushal
相关产品推荐
相关产品推荐

