=====py-kms=====
====Introduction====
py-kms est un ensemble de script python qui permet d'activer les copies des produits Microsoft licenciés avec une clé GVLK ou KMS. L'avantage apr rapport au produit officiel de Microsoft et la possibilité de l'utiliser sans connexion internet
Le produit est disponible grâce à l'excellent travail de [[https://github.com/SystemRage|SystemRage]] sur github : [[https://github.com/SystemRage/py-kms]]
Les clés produit nécessaires à la bonne activation sont disponibles sur le site de Microsoft :
* https://docs.microsoft.com/fr-fr/windows-server/get-started/kmsclientkeys
* Ou sur le wiki du projet : [[https://github.com/SystemRage/py-kms/wiki]]
====Pré-requis====
Pour ce cas, l'installation se fera sur une VM ubuntu 20.04 (focal) avec un accès au réseau local
* Un serveur linux avec un réseau fonctionnel et connecté à internet
* python3 (de préférence)
* git
====Déploiement====
Dans un premier temps, il faut installer les dépendances nécessaires dans l'OS :
$ sudo apt update
for python3
$ sudo apt install python3-tk python3-pip -y
$ sudo pip3 install tzlocal pysqlite3
Ensuite on clone le repository
$ cd /usr/local/bin/
$ sudo git clone https://github.com/SystemRage/py-kms.git
On enlève tout ce qui n'est pas utile
$ cd py-kms/
$ sudo mv py-kms/ py-kms_git
$ sudo mv py-kms_git/py-kms/ .
$ sudo rm -r py-kms_git/
On crée le fichier log du futur service
$ sudo mkdir /var/log/py-kms
$ sudo touch /var/log/py-kms/server.log
$ sudo chown myuser /var/log/py-kms/server.log
On lance le serveur pour vérifier que tout fonctionne
$ sudo ./pykms_Server.py -V INFO -F /var/log/py-kms/server.log &
$ more /var/log/py-kms/server.log
Tue, 26 May 2020 15:42:55 INFO TCP server listening at 0.0.0.0 on port 1688.
Tue, 26 May 2020 15:42:55 INFO HWID: 364F463A8863D35F
A ce stade le service est opérationnel. Le port 1688 est en écoute sur toutes les interfaces. Pour tester le fonctionnement, py-kms propose un faux client en python qui va simuler une demande d'activation
$ sudo python3 ./pykms_Client.py
La sortie ressemblera à ça :
Client generating RPC Bind Request...
Server receiving
<=============== Client sending RPC Bind Request...
Client sending
Server received RPC Bind Request !!! <===============
Server parsing RPC Bind Request...
Server generating RPC Bind Response...
Client receiving
Server sending RPC Bind Response... ===============>
RPC Bind acknowledged !!!
Server sending
===============> Client received RPC Bind Response !!!
RPC Bind acknowledged !!!
Client generating Activation Request dictionary...
Client generating Activation Request data...
Client generating RPC Activation Request...
Server receiving
<=============== Client sending RPC Activation Request...
Client sending
Server received RPC Activation Request !!! <===============
Server parsing RPC Activation Request...
Server processing KMS Activation Request...
Server processing KMS Activation Response...
Server generating RPC Activation Response...
Client receiving
Server sending RPC Activation Response... ===============>
Server responded, now in Stand by...
Server sending
===============> Client received Response !!!
Activation Done !!!
Le Log doit montrer le nom de la machine ainsi que le type de produit (Windows ou Office)
$ egrep "Machine|Application" /var/log/py-kms/server.log
Tue, 26 May 2020 15:47:54 INFO Machine Name: y88VjrtQ5iv7AN8vfNlRszGXaq9BAFMnevqF7CxxYEglLdeayh
Tue, 26 May 2020 15:47:54 INFO Client Machine ID: d53cf644-e1a0-4f1e-9466-22f896963fc3
Tue, 26 May 2020 15:47:54 INFO Application ID: Windows
==== Bonus ====
=== Création d'un service systemd ===
Afin d'utiliser ce serveur KMS comme un service, il faut créer le fichier service et le déclarer
$ sudo nano /etc/systemd/system/py-kms.service
Copier le contenu du service dans le fichier (en changeant la variable User par votre utilisateur)
[Unit]
Description=py-kms service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=myuser
ExecStart=python3 /usr/local/bin/py-kms/pykms_Server.py -V INFO -F /var/log/py-kms/server.log
[Install]
WantedBy=multi-user.target
Lancer le service
$ systemctl start py-kms
Vérifier l'état du service
$ systemctl status py-kms
Exemple de sortie montrant le service up and running
● py-kms.service - py-kms service
Loaded: loaded (/etc/systemd/system/py-kms.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2020-05-26 16:10:47 UTC; 6s ago
Main PID: 19190 (python3)
Tasks: 3 (limit: 2283)
Memory: 11.2M
CGroup: /system.slice/py-kms.service
└─19190 /usr/bin/python3 /usr/local/bin/py-kms/pykms_Server.py -V INFO -F /var/log/py-km>
May 26 16:10:47 samba4 systemd[1]: Started py-kms service.
Lancer le service au démarrage du serveur
$ systemctl enable py-kms
==== Troubleshooting ====
=== Impossible de lancer le service ===
- Vérifier les droits sur le fichier log (l'utilisateur qui lance pykms_Server.py doit être propriétaire du fichier)
- Vérifier qu'un autre service n'écoute pas sur le port 1688
$ sudo netatst -tulpn | grep 1688
tcp 0 0 0.0.0.0:1688 0.0.0.0:* LISTEN 19190/python3
* Si c'est le cas, terminer la tâche qui écoute sur ce port au moyen de son ID (19190 pour cet exemple)
$ sudo kill -9 19190
* Relancez le service
$ systemctl start py-kms
=====Online installer=====
Vous povez installer le serveur KMS en copiant la commande ci-dessous. Elle est exactement basée sur le script présent en bas de cette page
wget -O py-kms-installer.sh "https://wiki.loumy.fr/doku.php?do=export_code&id=py-kms&codeblock=1" && sudo bash ./py-kms-installer.sh
====Introduction ====
Basé sur les commandes ci-dessus, vous pouvez copier et exécuter le contenu de ce script dans un fichier pour l'installer en une fois (sudo ./py-kms-installer.sh par exemple):
#!/usr/bin/bash
# py-kms installer from git repository
# V 0.2 26.05.20 arnaud@loumy.ch
FOLDER_INSTALL='/usr/local/bin/py-kms'
FOLDER_LOG='/var/log/py-kms'
sudo apt update
sudo apt install python3-tk python3-pip -y
sudo pip3 install tzlocal pysqlite3
sudo mkdir $FOLDER_INSTALL
sudo mkdir $FOLDER_LOG
sudo git clone https://github.com/SystemRage/py-kms.git $FOLDER_INSTALL/
sudo mv $FOLDER_INSTALL/ $FOLDER_INSTALL.ori/
sudo mv $FOLDER_INSTALL.ori/py-kms/ $FOLDER_INSTALL/
sudo rm -r $FOLDER_INSTALL.ori/
sudo touch $FOLDER_LOG/server.log
sudo chown $USER $FOLDER_LOG/server.log
sudo touch /etc/systemd/system/py-kms.service
sudo echo "[Unit]
Description=py-kms service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=$USER
ExecStart=python3 $FOLDER_INSTALL/pykms_Server.py -V INFO -F $FOLDER_LOG/server.log
[Install]
WantedBy=multi-user.target" > /etc/systemd/system/py-kms.service
sudo systemctl enable py-kms
sudo systemctl start py-kms
sudo systemctl status py-kms