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

使用virsh执行KVM迁移时遇libvirt连接及密钥验证错误求助

解决KVM迁移时"Host key verification failed"的问题

咱们先拆解下你遇到的矛盾点:手动执行virsh -c qemu+ssh://mytargethostname.mydomain.com/system list --all能成功连通目标主机,但迁移命令却报主机密钥验证失败。核心原因是执行迁移的主体是libvirt守护进程(而非你当前登录的用户),两者使用的SSH密钥配置完全独立。

下面是具体的排查和解决步骤:

1. 确认libvirt守护进程的运行用户

先搞清楚libvirt服务是用哪个用户启动的:

ps aux | grep libvirtd

通常会看到进程以libvirt-qemu或root用户身份运行。

2. 为libvirt运行用户配置SSH免密信任

迁移操作是由libvirt守护进程发起的,所以需要给这个用户配置到目标主机的无密码SSH登录权限:

步骤A:切换到libvirt运行用户

如果是libvirt-qemu用户,执行:

sudo su -s /bin/bash libvirt-qemu

如果是root用户,直接用sudo执行后续命令即可。

步骤B:生成SSH密钥(若未生成过)

ssh-keygen -t ed25519

全程按回车,不要设置密钥密码,确保能实现免密登录。

步骤C:将公钥复制到目标主机

ssh-copy-id mytargethostname.mydomain.com

输入目标主机的用户密码完成公钥推送,之后测试无密码连接:

ssh mytargethostname.mydomain.com

确认能直接登录,且不会弹出主机密钥验证提示。

3. 重新执行迁移命令

现在再尝试你的迁移命令:

virsh migrate --verbose --live --p2p --tunnelled hosttomigrate qemu+ssh://mytargethostname.mydomain.com/system

应该就能正常建立连接了。

额外注意事项

  • 如果你是用sudo执行迁移命令,要确保root用户的SSH密钥也配置了对目标主机的信任,因为sudo会切换到root环境。
  • 检查目标主机的sshd_config,确保开启了公钥认证(PubkeyAuthentication yes),且允许libvirt-qemu或root用户SSH登录。
  • 若存在旧的主机密钥缓存问题,可清理libvirt用户的known_hosts文件后重新连接:
rm ~/.ssh/known_hosts

内容的提问来源于stack exchange,提问作者Japheth Odonya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:15:49