gcloud远程计算执行命令

时间:2016-08-23 10:13:55

标签: ssh google-compute-engine gcloud

目前,如果我想在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这样的第三方软件包。

3 个答案:

答案 0 :(得分:26)

尝试:

$ 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 :(得分:20)

一周前登陆的gcloud更新阻止了在&#39; - &#39;之后传递ssh命令。并有效地强制使用--command选项。在这种情况下使用:

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

答案 2 :(得分:2)

它有点切线;使用普通的ssh客户端代替gcloud compute

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

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