前言
在2018年8月,我第一次自己接触KMS服务,当时介绍了秋水逸冰的KMS一键脚本。
最近给虚拟机里的windows 11激活用的都是改版梅林软件中心能安装的系统工具
,很方便实用.
如果只是想激活系统和Office,使用现成的路由器插件或kms服务器地址即可,我做好的是kms.j000e.co
所以我想做一个长期运行的公用kms服务器,放在自己博客首页左侧边栏里.
本文遇到的主要难点在于如何用systemd为vlmscd开机启动,和如何拥有一个能监控服务器是否正常工作的页面.
准备vlmcsd
首先什么是vlmcsd?
vlmcsd is
- a replacement for Microsoft's KMS server It contains vlmcs a KMS test client, mainly for debugging purposes, that also can "charge" a genuine KMS server designed to run on an always-on or often-on device,e.g. router, NAS Box, ... intended to help people who lost activation of their legally-owned licenses, e.g. due to a change of hardware (motherboard, CPU, ...)
vlmcsd is not
- a one-click activation or crack tool intended to activate illegal copies of software (Windows, Office, Project, Visio)
目前GitHub上有两个vlmcsd开源项目,我们选择Wind4的版本.
下载最新的release并解压
wget https://github.com/Wind4/vlmcsd/releases/download/svn1113/binaries.tar.gz
tar -zxvf binaries.tar.gz
进入对应系统的目录并运行
cd binaries/Linux/intel/static/
./vlmcsd-x64-musl-static -L 0.0.0.0:xxxx
# 如果不带-L,则默认端口1688
# 举例:./vlmcsd-x64-musl-static -L 0.0.0.0:6666
测试一下服务是否正常运行
./vlmcs-x64-musl-static
#运行得到如下输出则正常
Connecting to 0.0.0.0:1688 ... successful
Sending activation request (KMS V6) 1 of 1 -> 03612-00206-566-464396-03-1103-14393.0000-2672021 (3A1C049600B60076)
#如下输出表示服务异常
Connecting to xx.xx.xx.xx:1688 ... successful
Fatal: Did not receive a response from server
Warning: Could not bind RPC
Fatal: Could not connect to any KMS server
也可以在windows系统上下载并解压binaries.tar.gz
后,进入到\binaries\Windows\intel
,在这个目录打开cmd并运行
vlmcs-Windows-x86.exe [IP or domain]:[Port]
#输出结果同上
创建systemd服务
关于systemd的一切详情,可以参考上一篇文章
首先放上我的配置文件kms.service
[Unit]
Description=vlmcsd
Wants=network.target
After=syslog.target
[Service]
Type=forking
PIDFile=/var/run/vlmcsd.pid
ExecStart=/home/KMS/binaries/Linux/intel/static/vlmcsd-x64-musl-static -l /var/log/vlmcsd.log -p /var/run/vlmcsd.pid
ExecReload=/bin/kill -SIGHUP $MAINPID
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=on-failure
RestartSec=30s
PrivateTmp=true
[Install]
WantedBy=multi-user.target
首先任意地方先新建一个kms.service
文件,然后粘贴上面配置进去,其中ExecStart
参数路径必须是绝对路径,容易写错.然后将该文件复制到/etc/systemd/system/
,即创建了一个新的服务,
vi kms.service
# 复制粘贴
cp kms.service /etc/systemd/system/
然后刷新一下systemctl配置,就可以使用systemd控制vlmcsd了
# 刷新配置
systemctl daemon-reload
# 开机自启
systemctl enable kms
# 启动
systemctl start kms
# 停止
systemctl stop kms
# 状态
systemctl status kms
通过之前的测试方法,重启,手动开关指令都生效了.
运行状态输出如下
● kms.service - vlmcsd
Loaded: loaded (/etc/systemd/system/kms.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-10-03 03:01:41 CST; 1s ago
Process: 1715 ExecStart=/home/KMS/binaries/Linux/intel/static/vlmcsd-x64-musl-static -l /var/log/vlmcsd.log -p /var/run/vlmcsd.pid (code=ex>
Main PID: 1717 (vlmcsd-x64-musl)
Tasks: 1 (limit: 1035)
Memory: 144.0K
CGroup: /system.slice/kms.service
└─1717 /home/KMS/binaries/Linux/intel/static/vlmcsd-x64-musl-static -l /var/log/vlmcsd.log -p /var/run/vlmcsd.pid
Oct 03 03:01:41 iZt4na5bkc7wj3hsqzikamZ systemd[1]: Starting vlmcsd...
Oct 03 03:01:41 iZt4na5bkc7wj3hsqzikamZ systemd[1]: Started vlmcsd.
至此,systemctl
对于自建的kms服务的各项操作功能都是有效的。
别人的配置文件
这里我记两个GitHub上看到的别人的配置
Scripts-Collection/files/vlmcsd/vlmcsd.service
[Unit]
Description=vlmcsd
Documentation=https://forums.mydigitallife.net/threads/emulated-kms-servers-on-non-windows-platforms.50234/
Wants=network.target
After=syslog.target
[Service]
Type=forking
PIDFile=/var/run/vlmcsd.pid
ExecStart=/usr/local/vlmcsd/vlmcsd -l /var/log/vlmcsd.log -p /var/run/vlmcsd.pid
ExecReload=/bin/kill -SIGHUP $MAINPID
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=on-failure
RestartSec=30s
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[Unit]
Description=vlmcsd
Wants=network.target
After=syslog.target
[Service]
Type=forking
PIDFile=/var/run/vlmcsd.pid
ExecStart=/usr/local/vlmcsd/vlmcsd -l /var/log/vlmcsd.log -p /var/run/vlmcsd.pid
[Install]
WantedBy=multi-user.target
配置Nginx反代本地端口
这里我们通过lnmp新建个vhost,再编辑nginx的conf的配置,来实现带SSL的域名访问+端口转发
lnmp vhost add
# 不需要开数据库,各种选项都不用开,网站目录默认空的就行,用自己的域名和SSL证书,
updatedb
# 更新系统索引
locate kms.j000e.co.conf
# 找到刚新建的网站的nginx配置文件位置,复制下来,然后用vi或者在sftp里直接编辑
vi /usr/local/nginx/conf/vhost/kms.j000e.co.conf
下面是我的配置文件:
server
{
listen 80;
#listen [::]:80;
server_name kms.j000e.co ;
index index.html index.htm index.php default.html default.htm default.php;
location / {
proxy_pass http://127.0.0.1:1688;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
}
server
{
listen 443 ssl http2;
#listen [::]:443 ssl http2;
server_name kms.j000e.co ;
index index.html index.htm index.php default.html default.htm default.php;
location / {
proxy_pass http://127.0.0.1:1688;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这里放记几个nginx的模板
将域名转发到本地端口
server{
listen 80;
server_name xxx.com;
index index.php index.html index.htm;
location / {
proxy_pass http://127.0.0.1:8080; # 转发规则
proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这样访问xxx.com 时就会转发到本地的 8080 端口
本地一个端口转发到另一个端口或另一个域名
server{
listen 80;
server_name 127.0.0.1; # 公网ip
index index.php index.html index.htm;
location / {
proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这样访问 http://127.0.0.1时就会转发到本地的 8080 端口或 http://www.baidu.com
加 / 与不加 /
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
例如
- 加 /
server_name xxx.com
location /data/ {
proxy_pass http://127.0.0.1/;
}
访问 http://xxx.com/data/index.html 会转发到 http://127.0.0.1/index.html
- 不加 /
server_name xxx.com
location /data/ {
proxy_pass http://127.0.0.1;
}
访问 http://xxx.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
激活指令
KMS服务是否在线?访问我的服务状态查看。
Windows
到Windows找到需要的版本密钥
slmgr /ipk NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J
# 设置产品密钥(Win10/11 专业工作站版)
slmgr /skms kms.j000e.co
# 设定KMS服务器
slmgr /ato
# 激活
slmgr /upk
# 取消激活
Office
到Office找到需要的版本密钥
cd C:\Program Files\Microsoft Office\Office16
# 进入Office目录
cscript ospp.vbs /inpkey:YC7DK-G2NP3-2QQC3-J6H88-GVGXT
# 安装密钥
cscript ospp.vbs /sethst:kms.j000e.co
# 如果用其他端口,单独设置ip和端口
# cscript ospp.vbs /sethst:[IP]
# cscript ospp.vbs /setprt:[Port]
cscript ospp.vbs /act
# 激活
cscript ospp.vbs /dstatus
# 查看激活信息
PS:Office的安装建议使用蓝点网的Office Tools