Linux修改mac地址重启后依然生效的方法步骤

 更新时间:2026年04月09日 09:42:46   作者:qing22222222  
本文介绍了使用shell脚本和u盘在新板上替换旧板mac地址的过程,包括获取旧板mac地址并保存到u盘,以及识别u盘拔插自动执行脚本以更改新板mac地址,文中详细解释了Netplan网络配置工具的使用方法,并针对配置文件和mac地址备份进行了说明,需要的朋友可以参考下

需求描述:项目中需要用新的板子替换掉旧的板子。旧板已在生产环境中使用,且网络已经配置好。为了使新板的网络配置跟旧板的一样,需要将新板的eth0和eth1这两个网口的mac地址替换成旧板的eth0和eth1两个网口的mac地址,并且重启后依然生效。

为了方便客户操作,计划通过shell脚本+u盘实现上述需求:

(1)在旧板插入u盘后,自动调用u盘中的脚本,获取旧板上的mac地址并生成.yaml文件保存到u盘中
(2)然后在新板插入u盘,将yaml文件拷贝到/etc/netplan路径下
(3)需要另写一个程序:识别u盘的拔插,以及根据ini配置文件自动执行u盘中的对应的脚本

这样在运行程序后,客户只需要拔插u盘就能实现mac地址的更换

本文主要介绍(1)(2)两步的实现过程

板子系统环境:ubuntu20.04

实现思路:需要先获取旧板上的mac地址,然后在新板中通过修改YAML 配置文件来达到更换mac地址的目的

一、Netplan网络配置

从 Ubuntu 17.10 版本开始引入Netplan,作为默认的网络配置管理工具。它通过简单的 YAML 文件 来定义网络设置,并交由不同的后端(如 systemd-networkd 或 NetworkManager)来管理实际的网络连接。(在 Ubuntu 16.04 及更早版本中,默认使用 /etc/network/interfaces 文件来配置网络)

YAML 配置文件

Netplan 使用 YAML 文件 来配置网络接口。这些文件通常位于 /etc/netplan/ 目录下,以 .yaml 作为文件扩展名。

出于安全考虑,在更换mac地址时需要先对原来的mac地址备份,需要了解以下信息:

(1)Netplan 没有强制要求配置文件的名称,只要求配置文件位于 /etc/netplan/ 目录下,并且必须是 YAML 格式。
(2)Netplan 会在启动时按文件名的字典顺序读取 /etc/netplan/ 目录下的所有 YAML 配置文件,如果有多个 YAML 文件,后读取的文件会覆盖之前文件中的配置。

假设你在 /etc/netplan/ 目录下有以下三个文件:

10-netplan.yaml
20-network-config.yaml
99-custom-settings.yaml

Netplan 会按顺序读取这些文件:

先读取 10-netplan.yaml
然后读取 20-network-config.yaml,如果文件中有和 10-netplan.yaml 中相同的配置项,后者会覆盖前者。
最后,读取 99-custom-settings.yaml,它会覆盖前两个文件中相同的配置项。

二、获取旧板上的mac地址

实现脚本

#!/bin/bash
#此脚本用于获取当前设备的mac地址,并生成对应的/etc/netplan/01-network-manager-all.yaml文件.
# U 盘挂载路径(程序里面已建立软链接,也可以根据U盘的挂载点修改)
USB_PATH="/userdata/workspace/runningspace/Upgrade"
CONFIG_NAME="01-network-manager-all.yaml"
# 检查 U 盘路径是否存在
if [ ! -d "$USB_PATH" ]; then
    echo "错误: 未找到 U 盘挂载路径 $USB_PATH"
    exit 1
fi
# 获取 MAC 地址
MAC_ETH0=$(cat /sys/class/net/eth0/address)
MAC_ETH1=$(cat /sys/class/net/eth1/address)
echo "检测到 eth0 MAC: $MAC_ETH0"
echo "检测到 eth1 MAC: $MAC_ETH1"
# 生成 YAML 内容
cat <<EOF > "${USB_PATH}/${CONFIG_NAME}"
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true
      macaddress: $MAC_ETH0
      optional: true
    eth1:
      dhcp4: true
      macaddress: $MAC_ETH1
      optional: true
EOF
echo "配置文件已生成至: ${USB_PATH}/${CONFIG_NAME}"

脚本解析:

1、在ubuntu20.04中,可以通过/sys/class/net路径下的文件获取网卡的mac地址

2、读取后生成相应的YAML文件,保存到u盘中。这里有个地方需要注意:

renderer需要设置为networkd(不是NetworkManager),并且optional设置为True。这样即使在没接网线的情况下,Netplan配置也能生效。否则后续根据YAML文件更改mac地址时如果没接网线就会更改失败

三、更改新板上的mac地址

实现脚本

#!/bin/bash

#此脚本用于将另一台设备的mac地址替换到当前设备

# U 盘挂载路径(程序里面已建立软链接,也可以根据U盘的挂载点修改)
USB_PATH="/userdata/workspace/runningspace/Upgrade"

# 定义路径
NETPLAN_DIR="/etc/netplan"
CONFIG_NAME="01-network-manager-all.yaml"
BACKUP_NAME="01-network-manager-all.yaml.bak"

# 检查 U 盘中是否有目标文件
if [ ! -f "${USB_PATH}/${CONFIG_NAME}" ]; then
    echo "错误: U 盘中不存在配置文件 ${CONFIG_NAME}"
    exit 1
fi

# 1. 备份原文件 (如果尚未备份)
if [ -f "${NETPLAN_DIR}/${CONFIG_NAME}" ]; then
    echo "正在备份原配置文件..."
    sudo cp "${NETPLAN_DIR}/${CONFIG_NAME}" "${NETPLAN_DIR}/${BACKUP_NAME}"
fi

# 2. 从 U 盘拷贝新配置
echo "正在从 U 盘应用新配置..."
sudo cp "${USB_PATH}/${CONFIG_NAME}" "${NETPLAN_DIR}/${CONFIG_NAME}"

# 3. 设置权限(Netplan 对权限有严格要求,通常为 600 或 644)
sudo chmod 600 "${NETPLAN_DIR}/${CONFIG_NAME}"

# 4. 应用 Netplan 配置
echo "正在应用网络配置..."
sudo netplan apply

if [ $? -eq 0 ]; then
    echo "MAC 地址永久修改成功!"
    ip link show eth0 | grep link/ether
    ip link show eth1 | grep link/ether
else
    echo "应用失败,请检查 YAML 语法或硬件状态。"
fi

到此这篇关于Linux修改mac地址重启后依然生效的方法步骤的文章就介绍到这了,更多相关Linux修改mac地址重启有效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Ubuntu22.04系统:fatal: 无法连接到 github.com

    Ubuntu22.04系统:fatal: 无法连接到 github.com

    这篇文章主要介绍了Ubuntu22.04系统:fatal: 无法连接到 github.com的相关资料,需要的朋友可以参考下
    2024-03-03
  • Centos7防火墙放行指定IP和端口方式

    Centos7防火墙放行指定IP和端口方式

    这篇文章主要介绍了Centos7防火墙放行指定IP和端口方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 详解Linux多线程编程(不限Linux)

    详解Linux多线程编程(不限Linux)

    本篇文章主要介绍了Linux多线程编程,详解的介绍了为什么要使用线程,使用线程的理由和优点等,有需要的可以了解一下。
    2016-12-12
  • Linux之定时任务Crond详解

    Linux之定时任务Crond详解

    本篇文章主要介绍了Linux之定时任务Crond详解 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Linux如何修改固定ip地址(亲测有效)

    Linux如何修改固定ip地址(亲测有效)

    这篇文章主要介绍了Linux如何修改固定ip地址问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Centos8搭建配置nis域服务详细步骤

    Centos8搭建配置nis域服务详细步骤

    大家好,本篇文章主要讲的是Centos8搭建配置nis域服务详细步骤,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • linux服务器上openssl版本升级方式

    linux服务器上openssl版本升级方式

    文章详细介绍了在Linux服务器上升级OpenSSL版本的步骤,包括查看当前版本、检查yum源、下载源码、编译安装、创建软链、更新动态链接库以及验证版本
    2025-03-03
  • centos7(redhat7)如何卸载自带yum并且安装国内yum源的方法

    centos7(redhat7)如何卸载自带yum并且安装国内yum源的方法

    本篇文章主要介绍了centos7(redhat7)如何卸载自带yum并且安装国内yum源的方法,具有一定的参考价值,有兴趣的可以了解一下
    2017-08-08
  • Linux提权技巧全面汇总

    Linux提权技巧全面汇总

    在Linux系统中,提权是指获取更高的权限,这通常通过使用特定的命令或工具来完成,在这篇文章中,我们将探讨一些常见的Linux提升权限的技巧:常用提权命令,反弹shell,获取完整交互式SHELL,Linux内核漏洞提权,脏牛提权,metasploit linux提权,SUID提权,passwd提权,ssh密钥提权
    2024-05-05
  • linux之Cron定时任务使用及说明

    linux之Cron定时任务使用及说明

    本文介绍了Cron的基本概念、语法和应用场景,详细解释了Cron的工作原理、组成部分及语法表达式,并提供了实际操作示例,文章还列举了常见Cron表达式及其应用场景,对比了不同操作系统的Cron差异,提供了使用注意事项、实践案例及常见问题解决方法
    2026-04-04

最新评论