使用 vlmcsd 搭建微软 KMS 激活服务器
1. 原文地址
https://www.lucien.ink/archives/435
如果你是一名无心学习的伸手党,可以直接看文章底部章节 8 的 “伸手党福利” 部分。
如果你是一名无心学习又懒得自己部署的伸手党,可参考 Windows & Office KMS 激活
2. 声明
文章本着学习 systemd 的目的,探究如何使用 systemd 来托管 vlmcsd 这样的原生后台进程,仅供学习交流,仅代表个人言论,与任何组织无关,严禁商用。
本文中的 vlmscd 来自 github.com/kkkgo/vlmcsd ,另附上可执行文件的 下载地址。
3. 介绍
身在天朝,很多人都会使用一些 KMS 激活软件来激活 Windows 或者是 Office ,其实 KMS 的本质就是让系统连接上一个认证服务器,通过认证服务器来验证当前用户是否有使用系统全部功能的权限。
但事实上,网上搜到软件并不是很能让人放心,因为软件本身通常会需要一些系统权限,而且会被杀毒软件认为是病毒,而直接通过 CMD 来进行 KMS 认证显然是一种绿色无毒无害的方式。
值得注意的是,KMS 激活的有效期只有 180 天,到期之后需要重新执行激活步骤,所以推荐将 vlmcsd 部署成服务器中的常驻服务,然后在 Windows 中设置一个定时器,每 180 天连接激活一次。
4. 缓存
防止和谐,我将截止 2019年5月20日 的最新版本缓存至我的个人资源服务器,里面有 1112 版本的 vlmscd ,如果担心我动手脚可以去 GitHub 自行下载。
5. 版本选择
一般来说:
树莓派等 arm 设备 Linux 用户下载 Linux-arm-1112.zip
VPS、虚拟机等 Linux 用户下载Linux-intel-1112.zip
Windows 用户下载Windows-intel-1112.zip
6. 部署
需要注意的是,vlmcsd 需要使用 1688 端口,所以请保证这个端口没被占用,且系统的 1688 端口需开启外部访问的权限。
6.1 Linux
6.1.1 安装
下载对应版本的 zip 文件之后,将其解压至 /usr/local/vlmcsd 下。
在 /usr/local/vlmcsd 下新建一个文件 vlmcsd.service ,填入以下内容并保存:
Description=Microsoft KMS Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/vlmcsd/static/vlmcsd-x64-musl-static
RemainAfterExit=yes
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
执行到这一步,文件目录应该是这样的:
├── glibc
│ └── ...
├── musl
│ └── ...
├── static
│ ├── vlmcsd-x64-musl-static
│ └── ...
├── uclibc
│ └── ...
└── vlmcsd.service
然后执行:
ln -s /usr/local/vlmcsd/vlmcsd.service /lib/systemd/system/ # 添加系统服务单元
systemctl daemon-reload # 重载系统服务单元
到这里,我们就已经完成了 vlmcsd 的安装。
6.1.2 启动/停止/查看状态
systemctl stop vlmcsd # 停止 vlmcsd
systemctl status vlmcsd # 查看运行状态
6.1.3 开机自启/取消开机自启
systemctl disable vlmcsd # 取消开机自启
6.1.4 卸载
systemctl disable vlmcsd # 取消开机自启
rm -f /lib/systemd/system/vlmcsd.service # 删除系统服务单元
systemctl daemon-reload # 重载系统服务单元
rm -rf /usr/local/vlmcsd # 删除源文件
执行完上述命令之后没有任何 vlmcsd 相关文件残留
6.2 Windows
应该没人用 Windows 当服务器系统吧,鸽。
7. 激活
7.1 Windows
以管理员身份打开 cmd 窗口,执行以下命令:
slmgr /ato
7.2 Office
以管理员身份打开 cmd 窗口,执行以下命令:
cscript ospp.vbs /act
8. 伸手党福利
如果你是一名伸手党,觉得上述过程过于详细,看起来很麻烦,那么你可以尝试一下我写好的一键脚本:
详细的脚本内容可以通过访问 https://pasteme.cn/<id> 查看对应的内容。
8.1 安装
8.2 卸载
一键安装脚本
ZIP_NAME=Linux-intel-1112.zip
DOWNLOAD_URL=https://file.lucien.ink/vlmcsd/${ZIP_NAME}
set -x
rm -rf /usr/local/vlmcsd
mkdir -p /usr/local/vlmcsd
cd /usr/local/vlmcsd
wget ${DOWNLOAD_URL}
unzip ${ZIP_NAME}
rm ${ZIP_NAME}
curl api.pasteme.cn?token=8215 > vlmcsd.service
chmod +x /usr/local/vlmcsd/static/vlmcsd-x64-musl-static
ln -s /usr/local/vlmcsd/vlmcsd.service /lib/systemd/system/
systemctl daemon-reload
systemctl enable vlmcsd
systemctl start vlmcsd
set +x
————————————————————————————————————————————————
版权声明:本文为CSDN博主「LucienShui」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xs18952904/article/details/90371781
————————————————————————————————————————————————
附件:KMS一键激活脚本
使用方法:将以下代码复制到记事本,另存为cmd批处理文件(如kms.cmd或kms.bat),然后以管理员身份运行脚本即可,可激活windows和Office。
mode con cols=75 lines=25
title=KMS激活工具
setlocal EnableDelayedExpansion&color 70 & cd /d "%~dp0"
%1 %2
ver|find "5.">nul&&goto :start
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :start","","runas",1)(window.close)&goto :eof
:start
set KMS_Sev=kms.yefengs.com
cls
echo 如果提示未找到序列号,请手动在CMD里运行
echo reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "EditionID"
echo 这个命令,把显示结果和系统版本直接在博客评论留言
echo 正在检查本机网络情况……......耐心等待
echo.
ping www.baidu.com | find "超时" > NUL && goto fail
ping www.baidu.com | find "目标主机" > NUL && goto fail
echo 本机网络良好……
ver | find "6.0." > NUL && goto winvista
ver | find "6.1." > NUL && goto win7
ver | find "6.2." > NUL && goto win8
ver | find "6.3." > NUL && goto win81
ver | find "10.0." > NUL && goto win10
echo 未找到合适的NT6系统,可能是WinXP或Win2003。
goto office
:winvista
echo 当前为Windows Vista/2008。
set Business=YFKBB-PQJJV-G996G-VWGXY-2V3X8
set BusinessN=HMBQG-8H2RH-C77VX-27R82-VMQBT
set Enterprise=VKK3X-68KWM-X2YGT-QR4M6-4BWMV
set EnterpriseN=VTC42-BM838-43QHV-84HX6-XJXKV
set ServerWeb=WYR28-R7TFJ-3X2YQ-YCY4H-M249D
set ServerStandard=TM24T-X9RMF-VWXK6-X8JC9-BFGM2
set ServerStandardV=W7VD6-7JFBR-RX26B-YKQ3Y-6FFFJ
set ServerEnterprise=YQGMW-MPWTJ-34KDK-48M3W-X4Q6V
set ServerEnterpriseV=39BXF-X8Q23-P2WWT-38T2F-G3FPG
set ServerWeb=RCTX3-KWVHP-BR6TB-RB6DM-6X7HP
set ServerDatacenter=7M67G-PC374-GR742-YH8V4-TCBY3
set ServerDatacenterV=22XQ2-VRXRG-P8D42-K34TD-G3QQC
set ServerEnterpriseIA64=4DWFP-JF3DJ-B7DTH-78FJB-PDRHK
goto windowsstart
:win7
echo 当前为Windows 7/2008 R2。
set Professional=FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4
set ProfessionalN=MRPKT-YTG23-K7D7T-X2JMM-QY7MG
set ProfessionalE=W82YF-2Q76Y-63HXB-FGJG9-GF7QX
set Enterprise=33PXH-7Y6KF-2VJC9-XBBR8-HVTHH
set EnterpriseN=YDRBP-3D83W-TY26F-D46B2-XCKRJ
set EnterpriseE=C29WB-22CC8-VJ326-GHFJW-H9DH4
set ServerWeb=6TPJF-RBVHG-WBW2R-86QPH-6RTM4
set ServerHPC=TT8MH-CG224-D3D7Q-498W2-9QCTX
set ServerStandard=YC6KT-GKW9T-YTKYR-T4X34-R7VHC
set ServerEnterprise=489J6-VHDMP-X63PK-3K798-CPX3Y
set ServerDatacenter=74YFP-3QFB3-KQT8W-PMXWJ-7M648
set ServerEnterpriseIA64=GT63C-RJFQ3-4GMB6-BRFB9-CB83V
goto windowsstart
:win8
echo 当前为Windows 8/2012。
set Professional=NG4HW-VH26C-733KW-K6F98-J8CK4
set ProfessionalN=XCVCF-2NXM9-723PB-MHCB7-2RYQQ
set Core=BN3D2-R7TKB-3YPBD-8DRP2-27GG4
set Enterprise=32JNW-9KQ84-P47T8-D8GGY-CWCK7
set EnterpriseN=JMNMF-RHW7P-DMY6X-RF3DR-X2BQT
set CoreN=8N2M2-HWPGY-7PGT9-HGDD8-GVGGY
set CoreSingleLanguage=2WN2H-YGCQR-KFX6K-CD6TF-84YXQ
set CoreCountrySpecific=4K36P-JN4VD-GDC6V-KDT89-DYFKP
set ServerMultiPointPremium=XNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G
set ServerMultiPointStandard=HM7DN-YVMH3-46JC3-XYTG7-CYQJJ
set ServerStandard=XC9B7-NBPP2-83J2H-RHMBY-92BT4
set ServerDatacenter=48HP8-DN98B-MYWDG-T2DCC-8W83P
goto windowsstart
:win81
echo 当前为Windows 8.1。
set Professional=GCRJD-8NW9H-F2CDX-CCM8D-9D6T9
set ProfessionalN=HMCNV-VVBFX-7HMBH-CTY9B-B4FXY
set Enterprise=MHF9N-XY6XB-WVXMC-BTDCT-MKKG7
set EnterpriseN=TT4HM-HN7YT-62K67-RGRQJ-JFFXW
set ServerSolution=KNC87-3J2TX-XB4WP-VCPJV-M4FWM
set ServerStandard=D2N9P-3P6X9-2R39C-7RTCD-MDVJX
set ServerDatacenter=W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9
set EmbeddedIndustry=32JNW-9KQ84-P47T8-D8GGY-CWCK7
goto windowsstart
:win10
echo 当前为Windows 10/Server 2016。
set Core=TX9XD-98N7V-6WMQ6-BX7FG-H8Q99
set CoreCountrySpecific=PVMJN-6DFY6-9CCP6-7BKTT-D3WVR
set CoreN=3KHY7-WNT83-DGQKR-F7HPR-844BM
set CoreSingleLanguage=7HNRX-D7KGG-3K4RQ-4WPJ4-YTDFH
set Professional=W269N-WFGWX-YVC9B-4J6C9-T83GX
set ProfessionalN=MH37W-N47XK-V7XM9-C7227-GCQG9
set Enterprise=NPPR9-FWDCX-D2C8J-H872K-2YT43
set EnterpriseN=DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4
set Education=NW6C2-QMPVW-D7KKK-3GKT6-VCFB2
set EducationN=2WH4N-8QGBV-H22JP-CT43Q-MDWWJ
set EnterpriseS=WNMTR-4C88C-JK8YV-HQ7T2-76DF9
set EnterpriseSN=2F77B-TNFGY-69QQF-B8YKP-D69TJ
set ServerDatacenter=CB7KF-BWN84-R7R2Y-793K2-8XDDG
set ServerStandard=WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY
set ServerEssentials=JCKRF-N37P4-C2D82-9YXRT-4M63B
set EnterpriseG=YYVX9-NTFWV-6MDM3-9PT4T-4M68B
set EnterpriseGN=44RPN-FTY23-9VTTB-MP9BX-T84FV
set ProfessionalEducation=6TP4R-GNPTD-KYYHQ-7B7DP-J447Y
set ProfessionalEducationN=YVWGF-BXNMC-HTQYQ-CPQ99-66QFC
set ProfessionalWorkstation=NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J
set ProfessionalWorkstations=NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J
set ProfessionalWorkstationsN=9FNHH-K3HBT-3W4TD-6383H-6XYWF
goto windowsstart
:windowsstart
for /f "tokens=3 delims= " %%i in ('reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "EditionID"') do set EditionID=%%i
if defined %EditionID% (
cscript //Nologo %windir%\system32\slmgr.vbs /ipk !%EditionID%!
cscript //Nologo %windir%\system32\slmgr.vbs /skms kms.yefengs.com
cscript //Nologo %windir%\system32\slmgr.vbs /ato
) else (
echo 找不到序列号,可能是旗舰版之类的系统……
)
goto office
:office
echo 检查安装的office……
call :GetOfficePath 14 Office2010
call :ActOffice 14 Office2010
call :GetOfficePath 15 Office2013
call :ActOffice 15 Office2013
if exist "%ProgramFiles%\Microsoft Office\Office16\ospp.vbs" set _Office16Path=%ProgramFiles%\Microsoft Office\Office16
if exist "%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs" set _Office16Path=%ProgramFiles(x86)%\Microsoft Office\Office16
if DEFINED _Office16Path (echo.&echo 已发现 Office2016
call :ActOffice 16 Office2016
) else (echo.&echo 未发现 Office2016)
echo.&pause
exit
:ActOffice
if DEFINED _Office%1Path (
cd /d "!_Office%1Path!"
if %1 EQU 16 call :Licens16
echo.&echo 尝试激活 %2 ...&echo.
cscript //nologo ospp.vbs /sethst:kms.yefengs.com >nul
cscript //nologo ospp.vbs /act | find /i "successful" && (
echo.&echo ***** %2 激活成功 ***** & echo.) || (echo.&echo ***** %2 激活失败 ***** & echo.)
)
cd /d "%~dp0"
goto :EOF
:GetOfficePath
echo.&echo 正在检测 %2 系列产品的安装路径...
set _Office%1Path=
set _Reg32=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\%1.0\Common\InstallRoot
set _Reg64=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\%1.0\Common\InstallRoot
reg query "%_Reg32%" /v "Path" > nul 2>&1 && FOR /F "tokens=2*" %%a IN ('reg query "%_Reg32%" /v "Path"') do SET "_OfficePath1=%%b"
reg query "%_Reg64%" /v "Path" > nul 2>&1 && FOR /F "tokens=2*" %%a IN ('reg query "%_Reg64%" /v "Path"') do SET "_OfficePath2=%%b"
if DEFINED _OfficePath1 (if exist "%_OfficePath1%ospp.vbs" set _Office%1Path=!_OfficePath1!)
if DEFINED _OfficePath2 (if exist "%_OfficePath2%ospp.vbs" set _Office%1Path=!_OfficePath2!)
set _OfficePath1=
set _OfficePath2=
if DEFINED _Office%1Path (echo.&echo 已发现 %2) else (echo.&echo 未发现 %2)
goto :EOF
:Licens16
for /f %%x in ('dir /b ..\root\Licenses16\project???vl_kms*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul
for /f %%x in ('dir /b ..\root\Licenses16\proplusvl_kms*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul
for /f %%x in ('dir /b ..\root\Licenses16\standardvl_kms*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul
for /f %%x in ('dir /b ..\root\Licenses16\visio???vl_kms*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul
for /f %%x in ('dir /b ..\root\Licenses16\project???vl_mak*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul
for /f %%x in ('dir /b ..\root\Licenses16\proplusvl_mak*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul
for /f %%x in ('dir /b ..\root\Licenses16\standardvl_mak*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul
for /f %%x in ('dir /b ..\root\Licenses16\visio???vl_mak*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul
cscript ospp.vbs /inpkey:NYH39-6GMXT-T39D4-WVXY2-D69YY >nul
cscript ospp.vbs /inpkey:7WHWN-4T7MP-G96JF-G33KR-W8GF4 >nul
cscript ospp.vbs /inpkey:RBWW7-NTJD4-FFK2C-TDJ7V-4C2QP >nul
cscript ospp.vbs /inpkey:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99 >nul
cscript ospp.vbs /inpkey:YG9NW-3K39V-2T3HJ-93F3Q-G83KT >nul
cscript ospp.vbs /inpkey:PD3PC-RHNGV-FXJ29-8JK7D-RJRJK >nul
goto :EOF
exit
:fail
cls
echo 无法连接到服务器……
pause
Great info. Lucky me I found your site by chance (stumbleupon).
I’ve book marked it for later!