gcloud compute 远程执行命令

Posted

技术标签:

【中文标题】gcloud compute 远程执行命令【英文标题】:gcloud compute execute command remotely 【发布时间】:2016-12-30 02:45:47 【问题描述】:

目前,如果我想在 VM 上执行某些操作,我会像这样复制文件:

gcloud compute --project <project_id> copy-files --zone <zone_name> /home/roman/source/dir roman@<vm_name>:/some/path

然后我需要像这样手动 SSH 进入它:

gcloud compute --project <project_id> ssh --zone <zone_name> <vm_name>

然后去运行一些命令:

cd /some/path
python example.py

如何将第 2 步和第 3 步结合起来远程执行命令?

注意:我想使用 gcloud 或 python api。我不想使用像 Fabric 这样的 3rd 方包。

【问题讨论】:

我认为这不可能。您可以将一些元数据添加到项目中,并让它在实例重启时自动运行。 【参考方案1】:

这样做有点切线;使用普通的 ssh 客户端而不是 gcloud compute:

ssh -i ~/.ssh/google_compute_engine roman@<vm_IP> 'python /some/path/example.py'

gcloud ssh 密钥位于它使用的 ~/.ssh/google_compute_engine。它还需要实例的外部 IP 地址而不是其名称。

【讨论】:

是的,gcloud compute ssh 只是一个包装器。【参考方案2】:

试试:

$ gcloud compute ssh --zone ZONE INSTANCE -- 'cd /tmp && python some.py'

来自gcloud compute ssh --help

 [-- IMPLEMENTATION-ARGS ...]
    Flags and positionals passed to the underlying ssh implementation.

    The '--' argument must be specified between gcloud specific args on the
    left and IMPLEMENTATION-ARGS on the right. Example:

        $ gcloud compute ssh example-instance --zone us-central1-a -- -vvv \
            -L 80:%INSTANCE%:80

【讨论】:

我们可以在终端上得到命令的输出吗?【参考方案3】:

一周前发布的 gcloud 更新阻止了在“--”之后传递 ssh 命令,并有效地强制为此使用 --command 选项。在这种情况下使用:

gcloud compute ssh --zone ZONE INSTANCE --command 'cd /tmp &amp;&amp; python some.py'.

【讨论】:

以上是关于gcloud compute 远程执行命令的主要内容,如果未能解决你的问题,请参考以下文章

无法使用“gcloud spanner databases ddl update”命令执行 Spanner DDL 脚本

`gcloud compute copy-files`:复制文件时权限被拒绝

我可以自动化 Google Cloud SDK gcloud init - 交互式命令吗

ssh如何远程执行命令?

ssh远程连接服务器执行命令

如何使用 PsExec 执行远程命令