You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

禁用SSH端口后访问KVM虚拟机并开启SSH的可行方案咨询

禁用SSH端口后访问KVM虚拟机并开启SSH的可行方案咨询

别急,这种卡壳的情况我之前也碰到过,其实还有不少办法能搞定,给你整理几个最实用的方案:

方案一:直接挂载虚拟机磁盘修改系统配置

这是最直接的思路——既然进不了虚拟机,那就把它的磁盘“拆”出来拿到宿主机上改配置,步骤如下:

  • 先把目标虚拟机关掉:virsh shutdown <你的虚拟机名称>
  • 查一下虚拟机的磁盘路径:virsh domblklist <你的虚拟机名称>,一般输出里会显示类似/var/lib/libvirt/images/xxx.qcow2的路径
  • 在宿主机上创建一个临时挂载目录:mkdir /tmp/vm_mount
  • 加载nbd模块并挂载磁盘:
    modprobe nbd
    qemu-nbd -c /dev/nbd0 /var/lib/libvirt/images/xxx.qcow2
    
  • 查看磁盘分区,找到根分区(通常是/dev/nbd0p1):fdisk -l /dev/nbd0
  • 挂载根分区到临时目录:mount /dev/nbd0p1 /tmp/vm_mount
  • 现在就可以修改虚拟机里的配置了:
    • 开启SSH服务开机自启:systemctl enable sshd --root=/tmp/vm_mount(适用于systemd系统)
    • 编辑SSH配置文件/tmp/vm_mount/etc/ssh/sshd_config,确保Port 22(或者你指定的端口)没有被注释,根据需要开启密码登录(把PasswordAuthentication no改成yes,如果被注释就去掉#)
    • 顺便配置virsh console(避免以后再碰到类似问题):编辑/tmp/vm_mount/etc/default/grub,在GRUB_CMDLINE_LINUX的参数里加上console=ttyS0,然后更新grub配置:
      • CentOS/RHEL系:grub2-mkconfig -o /tmp/vm_mount/boot/grub2/grub.cfg
      • Debian/Ubuntu系:update-grub --root=/tmp/vm_mount
  • 操作完后卸载磁盘,避免损坏:
    umount /tmp/vm_mount
    qemu-nbd -d /dev/nbd0
    rmmod nbd
    
  • 启动虚拟机:virsh start <你的虚拟机名称>,现在应该就能用SSH连接了

方案二:用virt-customize工具一键修改(更简便)

如果你的宿主机装了libvirt-client或virt-customize工具,这个方法更省心,不用手动挂载磁盘:

  • 先关闭虚拟机:virsh shutdown <你的虚拟机名称>
  • 执行以下命令修改配置:
    • 开启SSH自启:virt-customize -d <你的虚拟机名称> --run-command 'systemctl enable sshd'
    • 开启SSH端口(以22为例):virt-customize -d <你的虚拟机名称> --edit /etc/ssh/sshd_config:s/^#Port 22/Port 22/
    • 允许密码登录(如果需要):virt-customize -d <你的虚拟机名称> --edit /etc/ssh/sshd_config:s/^#PasswordAuthentication no/PasswordAuthentication yes/
    • 配置console支持:
      virt-customize -d <你的虚拟机名称> --edit /etc/default/grub:s/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 console=ttyS0"/
      virt-customize -d <你的虚拟机名称> --run-command 'grub2-mkconfig -o /boot/grub2/grub.cfg'
      
  • 启动虚拟机后,SSH和virsh console应该都能正常使用了

注意事项

  • 操作前最好备份虚拟机磁盘文件,比如cp /var/lib/libvirt/images/xxx.qcow2 /var/lib/libvirt/images/xxx.qcow2.bak,避免误操作导致数据丢失
  • 如果虚拟机是运行状态,尽量先关机再操作,强行挂载运行中的磁盘可能会损坏文件系统

备注:内容来源于stack exchange,提问作者Elvin Jafarov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:53:01