
Administrer un serveur KVM depuis votre poste de travail évite les connexions SSH multiples et permet d’utiliser l’interface graphique de virt-manager. Ce guide vous montre comment configurer l’accès distant de façon sécurisée.
À la fin de ce guide, vous saurez :
- Vous connecter à libvirt via SSH (méthode recommandée)
- Utiliser virsh en ligne de commande à distance
- Configurer virt-manager pour gérer des hôtes distants
- Comprendre les URIs de connexion libvirt
- Sécuriser l’accès (bonnes pratiques)
Prérequis
Section intitulée « Prérequis »Sur votre poste de travail (client) :
libvirt-clientou équivalent installé- Clés SSH configurées (recommandé)
virt-managersi vous voulez l’interface graphique
Sur le serveur KVM (distant) :
- libvirt installé et fonctionnel
- Service SSH actif
- Votre utilisateur dans le groupe
libvirt
Comprendre les URIs de connexion libvirt
Section intitulée « Comprendre les URIs de connexion libvirt »libvirt utilise des URIs (Uniform Resource Identifiers) pour identifier où se connecter. C’est comme une URL, mais pour les hyperviseurs.
Format général
Section intitulée « Format général »driver[+transport]://[username@]hostname[:port]/path[?parameters]Les URIs les plus courants
Section intitulée « Les URIs les plus courants »| URI | Description | Sécurité |
|---|---|---|
qemu:///system | Local, VMs système (root/libvirt) | — |
qemu:///session | Local, VMs utilisateur | — |
qemu+ssh://user@host/system | Distant via SSH | 🔒 Chiffré |
qemu+tcp://host/system | Distant via TCP | ⚠️ Non chiffré |
qemu+tls://host/system | Distant via TCP + TLS | 🔒 Chiffré |
system vs session : la différence
Section intitulée « system vs session : la différence »| URI | VMs visibles | Socket | Permissions |
|---|---|---|---|
/system | Toutes les VMs de l’hôte | /run/libvirt/libvirt-sock | Groupe libvirt ou root |
/session | VMs de l’utilisateur uniquement | $XDG_RUNTIME_DIR/libvirt/libvirt-sock | Utilisateur courant |
Pour l’administration serveur, utilisez toujours /system.
Méthode 1 : Connexion SSH (recommandée)
Section intitulée « Méthode 1 : Connexion SSH (recommandée) »La connexion via SSH est la plus simple et la plus sécurisée. Elle utilise le tunnel SSH existant — pas de port supplémentaire à ouvrir.
Comment ça fonctionne
Section intitulée « Comment ça fonctionne »- Votre client (virsh/virt-manager) ouvre une connexion SSH
- Il exécute
nc -U /run/libvirt/libvirt-socksur le serveur - Toutes les commandes passent par ce tunnel
Vérifier les prérequis côté serveur
Section intitulée « Vérifier les prérequis côté serveur »-
Vérifier que SSH fonctionne
Depuis votre poste :
Fenêtre de terminal ssh user@serveur-kvm hostnameDoit afficher le hostname du serveur.
-
Vérifier que l’utilisateur est dans le groupe libvirt
Sur le serveur :
Fenêtre de terminal groupsSortie attendue :
user libvirt kvmSi
libvirtn’apparaît pas :Fenêtre de terminal sudo usermod -aG libvirt $USER# Puis se reconnecter -
Vérifier que libvirt fonctionne localement
Sur le serveur :
Fenêtre de terminal virsh -c qemu:///system list --allDoit lister les VMs (même si la liste est vide).
Se connecter avec virsh
Section intitulée « Se connecter avec virsh »Depuis votre poste de travail :
virsh -c qemu+ssh://user@serveur-kvm/system list --allSortie attendue :
Id Name State----------------------------- 1 web-prod running - db-backup shut offSimplifier avec un alias
Section intitulée « Simplifier avec un alias »Pour éviter de retaper l’URI complet à chaque fois :
Option 1 : Alias shell
Ajoutez dans ~/.bashrc ou ~/.zshrc :
alias virsh-prod='virsh -c qemu+ssh://admin@prod-kvm.example.com/system'alias virsh-dev='virsh -c qemu+ssh://admin@dev-kvm.local/system'Utilisation :
virsh-prod list --allvirsh-dev start ma-vmOption 2 : Variable d’environnement
export LIBVIRT_DEFAULT_URI="qemu+ssh://admin@serveur-kvm/system"virsh list --all # Utilise automatiquement l'URIOption 3 : Configuration SSH
Ajoutez dans ~/.ssh/config :
Host kvm-prod HostName prod-kvm.example.com User admin IdentityFile ~/.ssh/id_ed25519Puis :
virsh -c qemu+ssh://kvm-prod/system listSe connecter avec virt-manager
Section intitulée « Se connecter avec virt-manager »virt-manager permet de gérer plusieurs hôtes KVM avec une interface graphique.
-
Lancer virt-manager
Fenêtre de terminal virt-manager -
Ajouter une connexion
- Menu File → Add Connection…
- Ou clic droit dans la liste → Add Connection…
-
Configurer la connexion
Champ Valeur Hypervisor QEMU/KVM Connection ✅ Connect to remote host over SSH Username votre-user Hostname serveur-kvm.example.com 
-
Valider
Cliquez sur Connect. Si vos clés SSH sont configurées, la connexion s’établit automatiquement.
Dépannage SSH
Section intitulée « Dépannage SSH »| Symptôme | Cause probable | Solution |
|---|---|---|
Permission denied (publickey) | Clé SSH non configurée | Configurer l’authentification par clé |
Cannot recv data: Connection reset by peer | Utilisateur pas dans groupe libvirt | sudo usermod -aG libvirt user |
error: failed to connect socket | libvirt non démarré sur le serveur | sudo systemctl start libvirtd |
| Connexion très lente | Résolution DNS inverse | Ajouter UseDNS no dans /etc/ssh/sshd_config |
Tester la connexion manuellement :
# Vérifier que le socket est accessible via SSHssh user@serveur-kvm "ls -la /run/libvirt/libvirt-sock"Sortie attendue :
srw-rw---- 1 root libvirt 0 Jan 31 10:00 /run/libvirt/libvirt-sockMéthode 2 : Connexion TCP (avancé)
Section intitulée « Méthode 2 : Connexion TCP (avancé) »La connexion TCP est utile quand :
- Vous ne pouvez pas utiliser SSH (restrictions réseau)
- Vous avez besoin de performances maximales (migration live)
- Vous avez un réseau de management isolé
Activer l’écoute TCP sur le serveur
Section intitulée « Activer l’écoute TCP sur le serveur »-
Éditer la configuration libvirtd
Fenêtre de terminal sudo nano /etc/libvirt/libvirtd.confDécommentez ou ajoutez :
# Écouter sur TCP (sans TLS pour le lab)listen_tls = 0listen_tcp = 1# Port d'écoute (16509 par défaut)tcp_port = "16509"# Adresse d'écoute (0.0.0.0 = toutes les interfaces)listen_addr = "0.0.0.0"# Authentification (none = pas d'auth, DANGEREUX)# Utilisez sasl pour de l'authentificationauth_tcp = "none" -
Activer l’écoute réseau
Pour les systèmes avec systemd, créez un override :
Fenêtre de terminal sudo systemctl edit libvirtdAjoutez :
[Service]ExecStart=ExecStart=/usr/sbin/libvirtd --listenOu modifiez
/etc/default/libvirtd:Fenêtre de terminal LIBVIRTD_ARGS="--listen" -
Redémarrer libvirtd
Fenêtre de terminal sudo systemctl restart libvirtd -
Vérifier l’écoute
Fenêtre de terminal ss -tlnp | grep 16509Sortie attendue :
LISTEN 0 128 0.0.0.0:16509 0.0.0.0:* users:(("libvirtd",pid=1234,fd=18)) -
Ouvrir le pare-feu
Fenêtre de terminal sudo ufw allow 16509/tcp # Ubuntu# ousudo firewall-cmd --permanent --add-port=16509/tcp && sudo firewall-cmd --reload # RHEL/Fedora
Se connecter via TCP
Section intitulée « Se connecter via TCP »Depuis le client :
virsh -c qemu+tcp://serveur-kvm/system list --allConnexion TLS (production)
Section intitulée « Connexion TLS (production) »Pour une connexion TCP sécurisée, utilisez TLS avec des certificats :
- Générer une CA et des certificats (serveur + client)
- Placer les certificats dans
/etc/pki/libvirt/ - Configurer
listen_tls = 1danslibvirtd.conf
Cette configuration est plus complexe. Pour la plupart des cas, SSH reste la meilleure option.
Commandes utiles à distance
Section intitulée « Commandes utiles à distance »Une fois connecté, toutes les commandes virsh fonctionnent normalement :
# Définir l'URI par défautexport LIBVIRT_DEFAULT_URI="qemu+ssh://admin@kvm-server/system"
# Lister les VMsvirsh list --all
# Voir les infos d'une VMvirsh dominfo web-prod
# Démarrer/arrêtervirsh start ma-vmvirsh shutdown ma-vm
# Console série (avec échappement Ctrl+])virsh console ma-vm
# Voir les logs QEMU (nécessite SSH direct)ssh admin@kvm-server "tail -f /var/log/libvirt/qemu/web-prod.log"Exécuter des commandes sur plusieurs hôtes
Section intitulée « Exécuter des commandes sur plusieurs hôtes »Script pour lister les VMs de plusieurs serveurs :
#!/bin/bash# list-all-vms.sh - Liste les VMs de tous les serveurs KVM
SERVERS="kvm1.example.com kvm2.example.com kvm3.example.com"
for server in $SERVERS; do echo "=== $server ===" virsh -c qemu+ssh://admin@$server/system list --all 2>/dev/null || echo " Connexion échouée" echo ""doneSécurité : bonnes pratiques
Section intitulée « Sécurité : bonnes pratiques »1. Utilisez SSH avec des clés
Section intitulée « 1. Utilisez SSH avec des clés »Jamais de mot de passe en clair. Configurez l’authentification par clé :
# Générer une clé si nécessairessh-keygen -t ed25519 -C "admin-kvm"
# Copier sur le serveurssh-copy-id admin@kvm-server2. Limitez les utilisateurs autorisés
Section intitulée « 2. Limitez les utilisateurs autorisés »Sur le serveur, seuls les utilisateurs nécessaires doivent être dans le groupe libvirt :
# Voir qui est dans le groupegetent group libvirt
# Retirer un utilisateursudo gpasswd -d utilisateur libvirt3. Utilisez des comptes dédiés
Section intitulée « 3. Utilisez des comptes dédiés »Ne pas utiliser root pour l’administration libvirt. Créez un compte dédié :
sudo useradd -m -G libvirt kvm-admin4. Restreignez l’accès SSH
Section intitulée « 4. Restreignez l’accès SSH »Dans /etc/ssh/sshd_config :
# Autoriser seulement certains utilisateursAllowUsers kvm-admin@192.168.1.0/24
# Désactiver root loginPermitRootLogin no5. Configurez le pare-feu
Section intitulée « 5. Configurez le pare-feu »SSH uniquement depuis les postes d’administration :
# UFW (Ubuntu)sudo ufw allow from 192.168.1.100 to any port 22
# firewalld (RHEL/Fedora)sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" accept'6. Auditez les connexions
Section intitulée « 6. Auditez les connexions »Vérifiez régulièrement les connexions :
# Dernières connexions SSHlast -a | head -20
# Logs libvirtjournalctl -u libvirtd | grep -i "client"Architecture multi-hôtes
Section intitulée « Architecture multi-hôtes »Pour gérer plusieurs serveurs KVM, voici une architecture recommandée :
Dans virt-manager, vous pouvez ajouter les 3 connexions et basculer facilement entre les hôtes.
Erreurs fréquentes
Section intitulée « Erreurs fréquentes »| Erreur | Cause | Solution |
|---|---|---|
Failed to connect socket to '/run/libvirt/libvirt-sock' | libvirt non démarré | sudo systemctl start libvirtd |
authentication failed | Utilisateur pas dans groupe libvirt | sudo usermod -aG libvirt user |
Permission denied (publickey) | Pas de clé SSH | Configurer ssh-copy-id |
Connection refused | Port non ouvert ou service arrêté | Vérifier firewall et service |
error: End of file while reading data | Version libvirt incompatible | Mettre à jour client/serveur |
À retenir
Section intitulée « À retenir »- SSH est la méthode recommandée — simple, sécurisé, pas de config serveur
- URI =
qemu+ssh://user@host/system— mémorisez ce format - Groupe
libvirtobligatoire — sur le serveur, pour l’utilisateur distant - Clés SSH = confort — évite les mots de passe à chaque commande
- TCP sans TLS = danger — uniquement sur réseau isolé de confiance
- virt-manager = multi-hôtes — gérez tous vos serveurs depuis une interface