猿问

以编程方式在 GCP VM 实例上运行 bash 脚本

我已经阅读了多篇关于在GCP虚拟机上运行脚本的帖子,但不幸的是,找不到满足我需求的答案。
我有一个Go应用程序,我正在寻找一种以编程方式在VM实例上运行bash脚本的方法。
我正在使用一个允许我获取 VM 实例信息的。遗憾的是,SDK 不包含允许在特定实例上运行 bash 脚本的功能(例如,与 Azure 云 SDK 不同)。Google Cloud Golang SDK

我发现的选项:

  1. Google Cloud Compute SDK 提供了一个用于设置启动脚本的选项,该脚本将在每次重新启动实例时运行。

  2. 添加实例级公有 SSH 密钥。建立 SSH 连接并使用 Go SSH 客户端运行脚本。

问题:

  1. 显然,启动脚本将需要实例重新启动,这在我的用例中是不可能的。

  2. SSH 也可能有问题,以防实例未运行 SSH 守护程序或 SSH 端口未打开。此外,SSH 守护程序配置默认不允许 root 登录(可能为 false),因此脚本可能在非特权用户上运行,使此选项也不合适。PermitRootLogin

我应该注意,我无权更改这些虚拟机的配置(例如,更改ssh守护程序conf以允许root登录),我只能使用基于令牌的身份验证来访问它们,最好是通过SDK,尽管只要我不将实例暴露在额外的风险中,其他选项也是可能的。
我有哪些选择?这可行吗?我错过了什么吗?

谢谢!


杨__羊羊
浏览 135回答 2
2回答

慕婉清6462132

正如Kolban所说,没有这样的API可以从VM内部的bash外部触发。最好的解决方案是部署一个调用bash的Web服务器(REST API)并公开它(外部或内部)。但你也可以作弊。可以在使用启动脚本运行并侦听自定义元数据的 VM 上创建守护程序。假设每秒检查一次。更新元数据后,守护程序可以执行操作。可以想象,元数据包含要使用参数运行的脚本。在运行结束时,守护程序将清理元数据。所以现在,要运行你的bash,调用setMetadata Api。这不是开箱即用的,但你可以拥有与你期望的相似的东西。

守着星空守着你

将 GCP 视为提供虚拟机基础架构,如计算、内存、磁盘和网络。计算机启动时运行的内容位于你和计算机映像之间。我听到你说你想在VM中运行bash脚本。这超出了基仕伯的治理范围。基仕伯只会影响环境的运行和存在。如果要执行的操作是以编程方式在 VM 中运行脚本,则需要在 VM 中运行某种形式的 demon,这些 demon 可以发出运行此类脚本的信号。这可能是一个Web服务器,如烧瓶或快递,它可能是你的SSH服务器,也可能是你选择的其他一些技术。我认为您正在寻找的核心是一些GCP API,当调用它时,它将在计算引擎中运行脚本。我要说的是,没有这样的API。
随时随地看视频慕课网APP

相关分类

Go
我要回答