Installazione e configurazione di PyKMS su Docker per l’attivazione delle licenze Microsoft Windows

da | Ott 27, 2025

 

 

In ambienti di sviluppo o home labs potrebbe risultare utile installare un server KMS su Linux per licenziare Windows ed Office in modo automatico, senza la necessità di acquistare un volume licensing.
Su GitHub si trovano diverse versioni di KMS open source installabili anche su Linux, in queste guida prenderemo in cosiderazione PyKMS che è stato sviluppato in Python e verrà mostrato come effettuarne il deploy su Docker.
Infine, verrà mostrata la configurazione del server DNS necessaria per rendere automatizzata la distribuzione delle licenze.

PREREQUISITI

PyKMS può essere installato su qualsiasi sistema compatibile con Python, in questa guida verranno mostati gli step di deploy su Docker.
Docker può essere eseguito sulla maggioranza dei sistemi operativi moderni, per testare la procedura è stato utilizzato un server Debian 13.

INSTALLAZIONE DI DOCKER SU DEBIAN

Questa guida non tratterà in modo approfondito l’installazione e la configurazione di Docker, ma verranno mostrati solo gli step “base”.

Aggiornare i repositories ed installare i pacchetti necessari:

Aggiungere la chiave GPG dei repositories di Docker:

Aggiungere i repositories di Docker:

Installare Docker con il comando:

Abilitare il servizio con il comando:

CLONARE IL REPOSITORY E COMPILARE IL DOCKERFILE

In questo paragrafo verranno mostrati gli step per clonare il repository PyKMS da GitHub e per compilare l’immagine Docker.
Sarebbe possibile utilizzare un’immagine salvata su un repository remoto (tipo su Harbor) per non dover compilare localmente l’immagine, ma è al di fuori dello scopo di questa guida.

Installare git con il comando:

Clonare il repository con il comando:

Navigare nella directory appena clonata:

Al fine di non aggiornare inavvertitamente l’immagine Docker è consigliato puntare ad un tag, in questo caso il tag della versione “1.0”:

Compilare l’immagine Docker:

Se si utilizzasse un tag diverso da 1.0 sarebbe necessario sostituirlo in entrambi i comandi precedenti e nel file docker-compose.yaml che verrà mostrato nei prossimi steps.

DEPLOY CON DOCKER COMPOSE

Al fine di semplificare la gestione del container Docker è auspicabile creare un file docker-compose.yaml ed effettuare il deploy mediante esso.

Uscire dalla directory precedente ed opzionalmente creare una nuova directory:

Creare un file denominato docker-compose.yaml con il seguente contenuto:

La direttiva command è commentata poichè non è necessaria, però può essere utilizzata per sovrascrivere il comando di avviamento del container (“CMD” nel DockerFile) in modo da specificare degli argomenti, come ad esempio –verbose per avere un output più dettagliato sullo stdout.

Per validare la sintassi del file è possibile utilizzare yamllint:

Per installarlo eseguire:

Per effettuare il deploy eseguire nella directory dove si ha creato il file docker-compose.yaml:

Invece, per rimuovere il container eseguire:

Per verificare lo stato dei containers in esecuzione:

Per visualizzare i logs di PyKMS:

Se non si attiva il flag –-verbose l’output dovrebbe essere:

NOTA BENE: La direttiva restart con modalità unless-stopped prevede che il container venga avviato al boot del server, per rimuoverlo utilizzare docker compose down.

CONFIGURAZIONE DEL SERVER DNS

È possibile creare un record SRV sul server DNS, per fa sì che l’attivazione con KMS avvenga mediante autodiscovery (automaticamente).
L’attivazione con autodiscovery funziona solo sui servers con search domain uguale alla zona in cui si crea il record, perciò i server senza join ad Active Directory potrebbero necessitare di uno step manuale che verrà mostrato nei prossimi capitoli.

Aprire lo snap-in DNS con un’utenza con privilegi sufficienti, collegarsi ad un server DNS ed accedere alla zona DNS in cui si vuole creare il record (è consigliato utilizzare la zona che corrisponde al dominio AD a cui vengono aggiunti i dispositivi da licenziare).
Facendo click destro in una zona senza record DNS (ad esempio a destra dell’ultima colonna) viene aperto un menù su cui è necessario selezionare Other New Records…:

Selezionare Service Location (SRV) e cliccare su Create Record…:

Compilare come segue e confermare cliccando su OK:

Service: _vlmcs
Protocol: _tcp
Priority: 0
Weight: 0
Port number: 1688
Host offering this service: RECORD-DNS-SERVER-KMS.

Sostituire RECORD-DNS-SERVER-KMS con un record A o con un record CNAME che punti al server KMS (ad esempio: kms.pizza.local).
Fare attenzione a mantenere il punto alla fine di Host offering this service (ad esempio: kms.pizza.local.).

Se non lo si ha creato prima è necessario creare il record DNS che punta al server KMS che nel nostro caso ha l’IP del server Docker.

Esempio con record A (10.10.10.10 sarebbe l’IP del server Docker):

Per visualizzare i records SRV, navigare su _tcp all’interno della zona DNS:

ATTIVAZIONE AUTOMATICA DI WINDOWS CON KMS

Dal momento che si ha creato il record SRV i servers sanno chi contattare per effettuare l’attivazione della licenza, ma non lo faranno se non gli viene agiunta la licenza generica.
La licenza generica cambia per ogni versione di Windows ed è possibile recuperare i codici dal seguente link: KMS Activation Keys
Inserire la licenza generica non significa licenziare il sistema operativo, senza KMS la macchina risultarà comunque ancora da attivare.
È possibile inserire la licenza generica mediante scripts, oppure in caso di macchine virtuali, direttamente nel template, in modo da non dover effettuare questo step manualmente.

Su Windows Server 2025 (step analoghi sono possibili su tutte le versioni di Windows), navigare nelle Impostazioni su System, poi su About ed infine su Product key and activation.
La finestra dovrebbe mostrarsi come segue, cliccare su Change:

Inserire la product key reperita sul sito Microsoft e cliccare su Next:

Dovrebbe venir mostrata una finestra come la seguente per avvertirci che verrà contattato il KMS, cliccare su Activate:

Se la procedura è andata a buon fine viene mostrata una finestra come la seguente:

Se invece ci fossero problemi di comunicazione con il KMS, ad esempio perchè il server non appartiene al dominio in cui è stato creato il record SRV o per problemi di network, verrebbe mostrato il seguente errore:

ATTIVAZIONE MANUALE DI WINDOWS CON KMS

Mediante CMD o PowerShell è possibile forzare la registrazione del dispositivo con il KMS, ad esempio nei casi in cui l’autodiscovery non funziona.

Per effettuare il reset dei parametri eseguire il comando:

Per configurare il server KMS eseguire (sostituire RECORD-DNS-SERVER-KMS con il record A o CNAME del KMS, ad esempio: kms.pizza.local):

Se la configurazione avviene correttamente viene mostrato il seguente avviso:

Per forzare la registrazione con il server KMS (sia se configurato manualmente con il comando precedente che tramite autodiscovery):

Se l’attivazione avviene con successo viene mostrato il seguente avviso:

Se non è stata aggiunta la licenza generica (vedi capitolo precedente) viene mostrato il seguente errore:

In questi casi procedere ad aggiungere la licenza generica ed eseguire slmgr /ato nuovamente.

Articoli Recenti

Veeam Backup

Monitoring

Friends

  • My English Lab  English School
  • ChrSystem   Servizi ICT
  • Since 01  Kreative Graphics

Database

Networking

Autori

  • Raffaele Chiatto  Amministratore
  • Marco Valle  Autore
  • Angelo Lauria  Autore
  • Edoardo Prot  Autore
  • Davide D’Urso  Autore
Marco Valle

Marco Valle

Mi chiamo Marco Valle e da sempre sono appassionato di Cybersicurezza e Linux. Per lavoro implemento soluzioni open source.

Related Post

Importazione di una VM tramite file OVA o OVF su Proxmox 9

    È tipico che le appliances vengano distribute in rete o dai fornitori mediante files OVA per facilitarne l'importazione su ambienti VMware. Proxmox supporta nativamente l'importazione di questo tipo di files, perciò è possibile creare una VM partendo da...

leggi tutto

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Virtualizzazione

Linux

Microsoft

Apple

Backup

Database

Security

Automazione