几个月前换了实习,是一家主要做云计算的创业公司,实习期间给公司的云平台产品做了license绑定主机信息的任务,只能使用shell,需要绑定的信息有:网卡mac地址,处理器id,主板id,系统uuid,硬盘id。我们认为,当以上5种信息,有3种及3种以上信息相同的情况下,确认为同一台主机,因为有的信息在不同环境下可能取不到。若是同一台主机,则含有这5种信息的license在校验过后准许登录,若不符合,则不允许登录。以下是shell脚本:
#!/bin/bash -e
exec 2>/dev/null
if [ ! -f "/usr/sbin/dmidecode" ]; then yum -y install dmidecode; fi
if [ ! -f "/sbin/hdparm" ]; then yum -y install hdparm; fi
if [ -f ~/sysInfo ]; then rm -f ~/sysInfo; fi
uuid=$(dmidecode -s system-uuid)
proccesorid=$(dmidecode -t processor |grep ID |head -1|sed 's/ID:/ /g')
baseboard=$(dmidecode -s baseboard-serial-number)
mac=$(awk '(!/^[#|$]/)&&/./{print $4}' /etc/udev/rules.d/70-persistent-net.rules |sed 's/ATTR{address}=="/ /g'|sed 's/",//g')
harddisk=$(hdparm -i /dev/sda | grep SerialNo |awk '{print $3}'|sed 's/SerialNo=//g')
sec=$(echo ${proccesorid}%${baseboard}%${mac}%${harddisk}%${uuid}| sed 's/ //g')
echo $sec|base64 -i|awk '{{printf "%s",$0}}'
由于要生成license,尽量不要明文,所以在最后又做了一次base64使得生成的sec可以以“密文”传出,当然,在之后真正生成license的时候,会再做一次真正的加密。