确定 shell 脚本是否在 Google Cloud Compute Engine 实例上运行的最佳方法是什么?



我需要 shell 脚本在不同云提供商提供的 debian 实例上运行时的行为略有不同。

我可以使用以下命令确定脚本是否在 EC2 上运行:

head -c 3 /sys/hypervisor/uuid

如果是,它将返回"EC2"。

我可以用来判断脚本是否在 Google Cloud Compute Engine 实例上运行的等效项是什么?

您可以使用

几种方法来发现脚本是否在 Google Compute Engine 实例中运行。

首先,如果您的脚本从 GCE 实例查询元数据服务器,则任何响应都将包含"元数据风格:Google"标头。例如,运行curl metadata.google.internal -i将生成如下输出:

HTTP/1.1 200 OK Metadata-Flavor: Google 
Content-Type: application/text 
Date: Tue, 07 Nov 2017 16:33:41 GMT 
Server: Metadata Server for VM 
Content-Length: 22 
X-XSS-Protection: 1; mode=block 
X-Frame-Options: SAMEORIGIN 0.1/ computeMetadata/

您还可以使用 dmidecode 工具访问/proc/mem 中的 DMI/SMBIOS 信息,这允许您搜索 GCE 特定的字符串。

例如,如果从 GCE 实例运行以下命令:

sudo dmidecode -s system-product-name | grep "Google Compute Engine"

这将生成以下输出,确认您的命令正在从 GCE 实例执行:

Google Compute Engine

最新更新