使用gcloud远程执行命令

38

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

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这样的第三方程序包。


我觉得这是不可能的。也许你可以在项目中添加一些元数据,并使其在实例重新启动时自动运行。 - Sridhar
3个回答

60

尝试:

$ 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

1
我们能在终端上看到命令的输出吗? - nam

53
一周前发布的gcloud更新,禁止使用“--”后面跟ssh命令,并且强制需要使用--command选项。在这种情况下,请使用以下命令:gcloud compute ssh --zone ZONE INSTANCE --command 'cd /tmp && python some.py'

3

稍微有点离题,使用普通的ssh客户端代替gcloud compute

ssh -i ~/.ssh/google_compute_engine roman@<vm_IP> 'python /some/path/example.py'
位于~/.ssh/google_compute_engine,用于连接。此外,它需要实例的外部IP地址而不是名称。


是的,gcloud compute ssh只是一个包装器。 - Dagang
顺便说一句,这个已经在这里有记录了(https://cloud.google.com/compute/docs/connect/standard-ssh#openssh-client)。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接