Vanuit WSL1 je KVM VM’s beheren met virt-manager over een beveiligde ssh-verbinding

In deze post laat ik je zien hoe je in Windows 10 over ssh verbindt naar je KVM VM’s (virtuele machines) met virt-manager (Virtual Machine Manager). Hiervoor heb je ook Windows Subsystem for Linux 1 (WSL1) nodig, want de Windows versie van virt-manager kan geen connectie over ssh maken. Sad but true. Om één en ander aan elkaar te breien heb je ook een X-server voor Windows nodig, en het gebruik van ssh keys maakt het geheel makkelijker omdat je niet steeds je wachtwoord hoeft in te voeren.

KVM VM’s beheren met virt-manager in Windows 10 Klik om te Tweeten

Het gebruik van ssh keys is vaak verplicht zodat je op een veilige manier verbinding maakt met externe servers (services) die onder jouw beheer vallen. Maar wat als je vanuit Windows een VM moet beheren die wordt gehost op KVM, en ssh key authenticatie verplicht is? Libvirt biedt geen QEMU met SSH (qemu+ssh://) ondersteuning in Windows met virt-manager. Dus moet je wat anders verzinnen.

Een Cygwin of Xming omgeving is dan natuurlijk een mogelijkheid. Maar hé, Windows heeft tegenwoordig ook Linux-ondersteuning aan boord in de vorm van Windows Subsystem for Linux of WSL. Ik schreef al eerder over hoe je een Access-database converteert naar MySQL in WSL. Handig hè?!

Tip: heb je nog geen Windows 10? Koop en download deze veilig & snel bij bol.com:
* Windows 10 Home – Nederlands
* Windows 10 Professional – Nederlands

Lees ook:  Webserver informatie verwijderen uit HTTP reactieheaders in IIS

Benodigde software

Je hebt nodig:

  • OpenSSH Client (PowerShell: Add-WindowsCapability -Online -Name OpenSSH.Client*)
  • ssh keys via ssh-keygen.exe, kies voor het type ed25519 en zet je key over naar je externe servers. Windows OpenSSH kent geen ssh-copy-id dus moet je zelf de key kopiëren
  • Windows Subsystem for Linux (PowerShell: Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux) en ik gebruik Ubuntu:
    Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1804 -OutFile Ubuntu.appx -UseBasicParsing
    Add-AppxPackage .\Ubuntu.appx
  • VcXsrv Windows X Server
  • virt-manager (in WSL) inclusief alle packages.

Installeer VcXsrv, en als je het start kun je gewoon de standaard instellingen geselecteerd laten.

VcXsrv is een open-source display server voor Microsoft Windows. Het stelt een Windows gebruiker in staat GUI programma’s uit te voeren die ontwikkeld zijn voor het X Window systeem van Linux.

In Bash moet je de lokale X server configureren.

  • voer het volgende commando uit:
    echo "export DISPLAY=localhost:0.0" >> ~/.bashrc
  • om dit te activeren, herstart Bash of voer het volgende commando uit:
    . ~/.bashrc

Je kunt nu een grafisch Linuxprogramma testen in Windows, zoals xeyes:
sudo apt-get install x11-apps && xeyes

Xeyes in Windows 10 via VcXserv X Server

Oké, we hebben het nu voor elkaar gekregen dat we grafische Linuxprogamma’s kunnen starten in Windows via een alternatieve X Server.

Ssh keys delen tussen Windows 10 en WSL1

Voor het gemak (nou ja… tot je een chmod foutje maakt) kun je je ssh keys delen tussen Windows 10 en WSL1. Gebruik je Windows omgeving voor het maken van de ssh key(s), en die kun je dan ook in WSL/Linux gebruiken. Hiervoor moet je je DrvFs mount aanpassen met metadata, of extra informatie, zodat Linuxpermissies aan een bestanden kunnen worden toegevoegd als metadata.

Lees ook:  Snelheid Windows NTFS bestandssysteem verbeteren, sneller toegang tot bestanden?

Hiermee kan een bestand zowel Linux én Windows read/write/execute permissie bits hebben. Neat! :)

Maak het bestand /etc/wsl.conf en plaats hierin:

[automount]
 enabled = true
 root = /mnt/
 options = "metadata,umask=22,fmask=11"
 mountFsTab = false

Je vindt meer informatie hierover in de blogposts Unix permissions on WSL NTFS mount en Automatically Configuring WSL. Nadat je dit bestand hebt aangemaakt moet je uitloggen uit WSL (en eventueel de service LxssManager herstarten). Als je WSL weer start kun je het mount point verifiëren met mount -l. Dat ziet er ongeveer zo uit:

$ mount -l
rootfs on / type lxfs (rw,noatime)
none on /dev type tmpfs (rw,noatime,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)
devpts on /dev/pts type devpts (rw,nosuid,noexec,noatime,gid=5,mode=620)
none on /run type tmpfs (rw,nosuid,noexec,noatime,mode=755)
none on /run/lock type tmpfs (rw,nosuid,nodev,noexec,noatime)
none on /run/shm type tmpfs (rw,nosuid,nodev,noatime)
none on /run/user type tmpfs (rw,nosuid,nodev,noexec,noatime,mode=755)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
cgroup on /sys/fs/cgroup type tmpfs (rw,relatime,mode=755)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,relatime,devices)
C:\ on /mnt/c type drvfs (rw,noatime,uid=1000,gid=1000,umask=22,fmask=11,metadata,case=off)

Nu heb je alleen nog geen ssh keys tot je beschikking in WSL. Dat kun je gelukkig snel oplossen met een symbolic link:

ln -s /mnt/c/Users/janreilink/.ssh/ ~/.ssh

Het is uiteraard belangrijk dat ~/.ssh nog niet bestaat. Als je dan verbinding maakt kun je de foutmelding setsockopt IPV6_TCLASS 16: Operation not permitted negeren (bron).

Lees ook:  USB-versie, snelheid, codering en USB-connector

Fijn, nu werkt ssh key authenticatie ook. Omdat je virt-manager (Virtual Machine Manager) hierboven al hebt geïnstalleerd kun je die nu ook proberen.

Virt-manager draaien in Windows 10 via WSL en een VcXserv X Server

Als alles hierboven goed is gegaan kun je nu Virtual Machine Manager starten en draaien in Windows 10, via WSL en een open source X Server VcXserv. Helemaal perfect zal het niet zijn, maar dat geeft niet. Het doel is dat het werkbaar is.

Voer in Bash uit:

virt-manager -c 'qemu+ssh://kvm-test.example.com/system'

en na een korte tijd zal het Virtual Machine Manager venster openen.

Virtual Machine Manager in Windows 10

Je kunt nu je normale beheerwerkzaamheden op KVM virtuele machines uitvoeren vanaf je Windows werkstation.

0 antwoorden

Plaats een Reactie

Meepraten?
Draag gerust bij!

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *