root@root:/nfs_share# virsh migrate --live vm1 qemu+ssh://root@172.22.149.0/system --unsafe error: unable to connect to server at 'root:49152': Connection refused 怎么解决?
根据用户提供的引用[3],里面提到了修改libvirtd.conf的配置,比如设置listen_tcp=1,auth_tcp为none,还有监听地址0.0.0.0以及端口16509。这可能涉及到libvirt服务端的配置是否正确,导致连接被拒绝。另外,引用[5]提到需要检查hosts文件是否正确解析,可能DNS或者hosts配置问题导致无法连接到目标主机。
接下来,我需要考虑常见的导致“connection refused”的原因。首先,可能是目标主机的libvirt服务没有正确配置监听TCP端口,或者防火墙阻止了连接。然后,检查SSH配置是否正确,因为使用qemu+ssh方式迁移需要SSH免密登录,否则认证失败也会导致连接问题。此外,SELinux或者AppArmor等安全模块可能会阻止连接,需要检查或者临时关闭它们。
用户的问题涉及virsh migrate命令,特别是使用qemu+ssh的情况,所以需要确保源主机能够通过SSH无密码连接到目标主机。这可能涉及到SSH密钥对的配置,以及权限问题。例如,如果使用root用户进行迁移,可能需要将公钥添加到目标主机的root用户的authorized_keys文件中。
另外,引用[4]提到了virDomainMigrateToURI2的参数,其中dconnuri的格式是qemu+tcp://desthost/system,而用户使用的是qemu+ssh,所以可能需要确认目标主机的URI是否正确,以及是否有权限访问。
步骤应该是:首先检查libvirt的配置,确保TCP监听开启,并且认证方式正确;然后检查防火墙是否开放了16509端口;接着确认SSH配置和密钥是否正确,能够无密码登录;再检查hosts文件或DNS解析是否正确;最后,可能需要调整SELinux或AppArmor的设置,或者临时禁用它们来测试。
可能还需要查看日志文件,如/var/log/libvirt/libvirtd.log,看看有没有更详细的错误信息,帮助定位问题所在。用户提供的引用[3]中也提到了配置日志输出,可以检查这些日志是否有相关错误。
总结下来,解决方案需要分步骤检查网络配置、libvirt服务配置、SSH认证、防火墙设置、主机解析以及安全策略等方面。需要逐一排除可能性,确保每个环节都正确配置。### 解决virsh migrate
连接被拒绝问题的分步指南
1. 检查目标主机libvirt服务配置
修改目标主机libvirtd.conf
配置文件,确保允许TCP连接并关闭认证:
# 文件路径:/etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
auth_tcp = "none" # 关闭TCP认证
listen_addr = "0.0.0.0" # 监听所有IP
tcp_port = "16509" # 确保端口未被占用
重启libvirt服务:
systemctl restart libvirtd
验证端口监听状态:
netstat -tuln | grep 16509 # 应显示0.0.0.0:16509处于LISTEN状态
若未生效,检查日志/var/log/libvirt/libvirtd.log
[^3]。
2. 配置SSH免密登录
使用qemu+ssh
迁移需确保源主机能通过SSH无密码登录目标主机:
# 在源主机生成密钥(若未生成)
ssh-keygen -t rsa
# 将公钥复制到目标主机
ssh-copy-id root@目标主机IP
# 测试连接
ssh root@目标主机IP # 应无需输入密码
注意:若使用非root用户,需确保该用户在目标主机有libvirt管理权限[^1]。
3. 关闭防火墙或开放端口
临时关闭防火墙(测试用):
systemctl stop firewalld # CentOS/RHEL
ufw disable # Ubuntu/Debian
或开放TCP端口16509
和SSH端口(默认22):
firewall-cmd --add-port=16509/tcp --permanent
firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --reload
4. 检查主机名解析
确保源主机能正确解析目标主机名:
# 在源主机编辑/etc/hosts,添加目标主机IP与主机名映射
echo "目标主机IP kvm02" >> /etc/hosts
ping kvm02 # 验证解析是否成功[^5]
5. 调整SELinux/AppArmor
临时禁用SELinux(测试用):
setenforce 0
或设置SELinux策略允许迁移:
setsebool -P virt_use_nfs 1
(AppArmor需类似调整)
6. 执行迁移命令
使用完整迁移命令格式:
virsh migrate --live 虚拟机名称 qemu+ssh://目标主机IP/system --unsafe --verbose
参数说明:
--live
:热迁移--unsafe
:绕过部分安全检查(谨慎使用)--verbose
:显示详细日志
常见错误排查表
现象 | 可能原因 | 解决方案 |
---|---|---|
Failed to connect to remote host: Connection refused |
目标主机未开启TCP监听或防火墙阻挡 | 检查libvirtd.conf 配置与防火墙规则[^3] |
Permission denied (publickey) |
SSH密钥配置错误 | 重新配置SSH免密登录 |
Unable to resolve hostname |
主机名解析失败 | 检查/etc/hosts 或DNS配置[^5] |
libvirt error: authentication failed |
TCP认证未关闭 | 设置auth_tcp = "none" |
相关推荐

















