搭建kms服务器
环境说明
kms ( Key Management Service ) 实际上是微软官方推出的针对大客户的大批量激活工具,比如一个公司中,可能有上百台电脑,公司为他们统一购置了正版的 Windows 系统和 Office 套件。把这些电脑组成网络,中间设置一台 kms 服务器,微软将授权信息记录在 kms 服务器中,然后用 kms 服务器就可以方便地快速对网络中的计算机配置正版软件
想法是好的,这比 xp 时代的静态序列号激活要安全多了,但是这个设计有一个漏洞,就是在激活过程中,用户计算机只需要与局域网中的 kms 连接验证授权信息,而不需要向 Microsoft 服务器进行验证。所以一旦 kms 服务器的搭建被破解,激活微软软件就易如反掌
这就是 kms 的原理
常见的 win 端 kms 激活软件的基本原理就是在本机创建一个 kms server 虚拟机,然后对软件进行授权验证,一般一次只能激活180天,180天后自动续期
也可以搭建kms服务器替代这个kms server虚拟机
在windows或者linux系统上部署都是可以的,这里主要介绍下linux下的搭建步骤
参考网站:
自建KMS服务器 | 持续激活Windows - 腾讯云开发者社区-腾讯云 (tencent.com)
适用于 Windows Server 和 Windows 的密钥管理服务 (KMS) 客户端激活和产品密钥 | Microsoft Learn
centos系统信息:CentOS Linux release 7.9.2009 (Core)
搭建步骤
上述参考网站中有一键安装的脚本,但脚本里使用了wget、git命令,不一定能直接下载到文件,所以主要介绍源文件安装的方法:
建立kms存放目录
mkdir -p /usr/local/kms下载kms服务器源文件并通过ftp放到对应目录下

这里我们选择第三个文件下载。第一个为二进制文件,第二个为zip文件
通过ftp将文件传到/usr/local/kms下面
解压文件并重命名
tar -xf vlmcsd-svn1113.tar.gz
mv vlmcsd-svn1113 vlmcsd安装构建所需依赖
yum -y install gcc make构建文件
cd vlmcsd
make
执行kms
cd bin
./vlmcsd此时,我们的kms服务器已经搭建完成了,只需要在待激活的服务器上执行以下命令就可以激活windows和office
激活windows
在待激活的Windows系统中以管理员身份运行cmd
顺序执行以下命令
slmgr -ipk W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9
# 最后一串字符为批量激活密钥,可以在微软官网查到,也可在参考网站出直接跳转
slmgr -skms 47.109.94.84
# 最后一串字符为kms服务器的域名,如果您没有域名,用您的服务器IP也是可以的
slmgr -ato


将kms程序设置为服务
为了方便管理,我们可以将kms程序设置为服务
vi /etc/init.d/kms将下列脚本内容复制到启动文件中
#!/bin/bash
#chkconfig:85 15
DESC="kms daemon"
NAME=vlmcsd
DAEMON=/usr/local/kms/vlmcsd/bin/$NAME
SCRIPTNAME=/etc/init.d/$NAME
STAT=2
# 检测KMS运行状态
check_running(){
PID=$(ps -ef | grep "vlmcsd" | grep -v grep | awk '{print $2}')
if [ ! -z "$PID" ]; then
STAT=0
else
STAT=1
fi
}
do_start() {
check_running
if [ $STAT = 0 ]; then
echo "KMS already running!"
exit 0;
else
$DAEMON
fi
check_running
if [ $STAT = 0 ]; then
local_ip=`curl -4 ip.sb`
echo "KMS start success!"
elif [ $STAT = 1 ]; then
echo "KMS start faild"
fi
}
do_stop() {
check_running
if [ $STAT = 0 ]; then
echo "KMS Stopping ..."
kill $PID
check_running
if [ $STAT = 0 ]; then
echo "KMS stop faild!"
elif [ $STAT = 1 ]; then
echo "KMS stop success!"
fi
elif [ $STAT = 1 ]; then
echo "KMS is not running"
fi
}
do_status(){
check_running
if [ $STAT = 0 ]; then
echo "KMS is running"
elif [ $STAT = 1 ]; then
echo "KMS is not running"
fi
}
case "$1" in
start)
do_start
;;
stop)
do_stop
;;
restart)
do_start
do_stop
;;
status)
do_status
;;
esac
exit 0
之后就可以用service kms start|stop|restart|status来对kms进行管理了
