You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过gcloud或Python googleapiclient获取VM实例MAC地址

非SSH方式获取GCP VM实例MAC地址的实现方案

完全不需要SSH登录到实例内部,直接通过GCP Compute Engine控制面接口就能拿到实例网卡的MAC地址,MAC地址属于实例元数据的内置字段,只要调用身份拥有实例的只读查看权限即可查询,下面分别给出gcloud命令行和googleapiclient的实现方式:

基于gcloud命令行的实现

gcloud本身就是对GCP API的封装,直接通过格式化参数过滤网卡对应的MAC字段即可,不需要和实例建立SSH连接:

  • 查询单台指定实例的所有网卡MAC地址:
gcloud compute instances describe <你的实例名称> --zone=<实例所在可用区> --format="value(networkInterfaces[].macAddress)"
  • 批量列出当前项目下所有实例的名称、所属可用区、对应MAC地址:
gcloud compute instances list --format="table(name, zone, networkInterfaces[].macAddress)"

基于Python googleapiclient包的实现

本质和gcloud调用的是同一套Compute Engine v1 API,核心是读取接口返回结果中networkInterfaces数组下每个网卡对象的macAddress字段,示例代码如下:

from googleapiclient import discovery
from google.oauth2 import service_account

# 请替换为你自己的配置信息
AUTH_SCOPES = ["https://www.googleapis.com/auth/compute.readonly"]
SA_KEY_PATH = "你的服务账号密钥文件路径.json"
GCP_PROJECT_ID = "你的GCP项目ID"
TARGET_ZONE = "目标实例所在可用区,例如us-central1-a"
TARGET_INSTANCE = "要查询的实例名称"

# 初始化认证与API客户端
creds = service_account.Credentials.from_service_account_file(
    SA_KEY_PATH, scopes=AUTH_SCOPES
)
compute_client = discovery.build("compute", "v1", credentials=creds)

# 拉取实例元数据
instance_resp = compute_client.instances().get(
    project=GCP_PROJECT_ID,
    zone=TARGET_ZONE,
    instance=TARGET_INSTANCE
).execute()

# 提取所有网卡的MAC地址
mac_addresses = [nic["macAddress"] for nic in instance_resp["networkInterfaces"]]
print(f"实例{TARGET_INSTANCE}的网卡MAC地址列表:{mac_addresses}")

如果需要批量查询全项目所有实例的MAC,把上述代码中的get方法替换为aggregatedList方法,遍历所有可用区的实例返回结果即可。

注意:通过上述接口拿到的MAC地址是GCP为虚拟网卡分配的固定地址,实例重启、开关机都不会发生变化,和登录实例内部查询到的网卡MAC地址完全一致。

内容的提问来源于stack exchange,提问作者Dima Yagudaev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 11:00:59