使用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
相关产品推荐
相关产品推荐

