前提:使用virsh管理kvm虚拟机的时候出现需要使用密码的情况
[root@a-kvm-t-1 ~]# virsh list --all
Please enter your authentication name: root
Please enter your password:
error: Failed to reconnect to the hypervisor
error: no valid connection
error: authentication failed: authentication failed
原因分析使用了sasl认证
# 解决
[root@a-kvm-t-1 ~]# saslpasswd2 -a libvirt admin
Password: # 输入密码
Again (for verification): # 确认密码
[root@a-kvm-t-1 ~]# virsh list --all
Please enter your authentication name: admin
Please enter your password: #密码
Id Name State
----------------------------------------------------
1 kvm-1 running
2 kvm-2 running
- kvm-3 shut off
# 可以看出创建密码后可以通过virsh正常管理kvm虚拟机
下面详细介绍摘自:IBM
Simple Authentication and Security Layer (SASL) 提供了安全认证和数据加密,但是允许与传统或外部认证和授权服务集成。 在其最简单的形式下,SASL 可用来定义用于进行授权的凭证的数据库。在较复杂的场景中,它可与外部认证服务(例如 Kerberos 或轻量级目录访问协议 (LDAP))一起工作以对用户进行认证。在这两种场景中,如果远程管理请求并非在受保护的传输层安全性 (TLS) 连接上面运行,那么 libvirtd 守护程序通过需要“类属安全性服务”应用程序编程接口 (GSSAPI) 作为 SASL 方法来提供机密性。libvirtd 守护程序可将 DIGEST-MD5 而不是 GSSAPI 用作 SASL 方法。但是,MD5 散列被视为不安全,不应该使用。SASL 的这些变体支持对推送的数据进行加密。为简便起见,此示例将 DIGEST-MD5 用作 SASL 方法。 要在最简单的场景(没有外部认证或 TLS 安全性)中使用 SASL 配置远程管理,请完成下列步骤:
以下示例显示了这些参数(与股票 libvirtd.conf 文件对比),突出显示了要删除 (-) 和增加 (+) 的更改:
--- libvirtd.conf.orig 2012-01-04 11:28:32.000000000 -0600
+++ libvirtd.conf 2012-01-04 11:34:02.000000000 -0600
@@ -19,7 +19,7 @@
# using this capability.
#
# This is enabled by default, uncomment this to disable it
-#listen_tls = 0
+listen_tls = 0
# Listen for unencrypted TCP connections on the public TCP/IP port.
# NB, must pass the --listen flag to the libvirtd daemon process for this to
@@ -30,7 +30,7 @@
# DIGEST_MD5 and GSSAPI (Kerberos5)
#
# This is disabled by default, uncomment this to enable it.
-#listen_tcp = 1
+listen_tcp = 1
@@ -143,7 +143,7 @@
# Don't do this outside of a dev/test scenario. For real world
# use, always enable SASL and use the GSSAPI or DIGEST-MD5
# mechanism in /etc/sasl2/libvirt.conf
-#auth_tcp = "sasl"
+auth_tcp = "sasl"
# Change the authentication scheme for TLS sockets.
#
--- libvirtd.orig 2012-01-04 11:41:37.000000000 -0600
+++ libvirtd 2012-01-04 11:31:33.000000000 -0600
@@ -3,7 +3,7 @@
# Listen for TCP/IP connections
# NB. must setup TLS/SSL keys prior to using this
-#LIBVIRTD_ARGS="--listen"
+LIBVIRTD_ARGS="--listen"
# Override Kerberos service keytab for SASL/GSSAPI
#KRB5_KTNAME=/etc/libvirt/krb5.tab
# /etc/init.d/libvirtd restart
Stopping libvirtd daemon: [ OK ]
Starting libvirtd daemon: [ OK ]
# saslpasswd2 -a libvirt admin
Password:
Again (for verification):
注: libvirt 是 libvirtd 守护程序认证域的 SASL 数据库的预期名称。请勿将任何其他名称用于此数据库。 请使这些凭证保持安全状态,因为此数据库中的每个用户都有权登录并运行远程虚拟机管理。
# virsh -c qemu+tcp://kvmhost.company.org/system start guest02
Please enter your authentication name:admin
Please enter your password:
Domain guest02 started