Centos系统获取宿主机IP地址,MAC地址,磁盘序列号和CPU序列号的shell脚本

发布于:2023-01-11 ⋅ 阅读:(1042) ⋅ 点赞:(0)

一、背景

        公司项目License系统激活需要获取IP地址、LZ通过ssh服务连接宿主机执行shell脚本语言在docker容器中获取宿主机的MAC地址、磁盘序列号、CPU序列号与License绑定,达到定制化主机系统激活,中间如果报命令不存在的话,下载对应的命令即可,话不多说脚本写起

二、编写脚本

1、 获取宿主机的IP地址

注意:LZ是在宿主机的环境编写脚本获取IP地址的,如果是docker环境内想获取宿主机的IP地址可以容器里面装ssh服务,通过ssh来执行宿主机脚本,或者在宿主机上写个http服务来执行脚本,容器通过暴露的端口来调用

①首先ifconfig命令看一下插网线的网卡:可以看到我的网线对应的网卡是enp4s0,ip的内网段是11,且排在内网卡第一位(还有一个内网卡是virbr0),所以使用hostname -I命令获取IP地址时,再通过awk命令处理打印$1就好(为了模拟更清楚又要安全,以下硬件信息做了大幅修改)

[root@localhost ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 08:30:fc:42:f1:20  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.29  netmask 255.255.255.0  broadcast 192.168.17.255
        inet6 fg30::f2c5:738a:1df1:ecb7  prefixlen 64  scopeid 0x20<link>
        ether b4:9e:fs:7e:cf:80  txqueuelen 1000  (Ethernet)
        RX packets 7410  bytes 693421 (677.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 588  bytes 86760 (84.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 7397  bytes 450934 (440.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7397  bytes 450934 (440.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 82:94:0f:11:e9:04  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 ②vim编辑一个脚本文件,脚本内容:hostname -I|awk '{print $1}',然后使用sh getIp.sh 命令或者直接./getIp.sh 跑一下脚本查看运行结果

[root@localhost ~]# vim getIp.sh 

hostname -I|awk '{print $1}'

[root@localhost ~]# sh getIp.sh 
192.168.11.29

2、 在docker容器中获取宿主机的MAC地址

 前面已经获取到ip地址,如果是宿主机下测试ssh服务,这里LZ将获取IP地址脚本getIp.sh的打印结果当作参数传递给获取Mac地址脚本(注意:1、sshpass -p'你的连接密码',2、这里LZ取的是docker0这个虚拟网卡对应的mac地址),然后使用sh macAddress.sh 命令或者直接./macAddress.sh 跑一下脚本查看运行结果。之后在docker中运行的话(以下这里不演示了):①修改脚本将IP地址写死,②然后通过docker cp命令将脚本移到docker容器内即可使用,返回的结果一样

[root@localhost ~]# vim macAddress.sh

ipAddress=`./getIp.sh`

sshpass -p 'your connect password' ssh -o StrictHostKeyChecking=no -p 22 root@$ipAddress ifconfig docker0 | grep "ether" | awk '{print $2}' 

[root@localhost ~]# sh macAddress.sh 
08:30:fc:42:f1:20

3、获取宿主机的CPU序列号(使用dmidecode命令,在docker容器中或者宿主机内都可获取到

 如果报dmidecode未知命令,则yum install dmidecode -y //docker需要下载dmidecode

4、获取宿主机的磁盘序列号 (使用fdisk命令,在docker容器中或者宿主机内都可获取到

 这里可能会报GPT支持最新处于实验阶段的警告,问题不大,警告不理会就好

 [root@localhost ~]# vim identifier.sh 

fdisk -l |grep "Disk identifier" |awk {'print $3'}

 [root@localhost ~]# sh identifier.sh 

WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
1D23B337-FD71-4231-B78A-B3EFF23A6789

坚定的意志,温柔的心


网站公告

今日签到

点亮在社区的每一天
去签到