2016-08-23 141 views
8

目前,如果我想在虚拟机上运行的东西,我复制文件过这样的:gcloud计算执行远程命令

gcloud compute --project <project_id> copy-files --zone <zone_name> /home/roman/source/dir [email protected]<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等第三方软件包。

+0

我不认为这是可能的。您可以添加一些元数据到项目中并让它在实例重启时自动运行。 – Sridhar

回答

14

尝试:

$ 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 
2

它有一点切线;使用正常的SSH客户端而不是gcloud compute

ssh -i ~/.ssh/google_compute_engine [email protected]<vm_IP> 'python /some/path/example.py' 

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

+0

是的,'gcloud compute ssh'只是一个包装。 – Dagang

8

降落在一周前路过阻止SSH命令后gcloud更新 ' - ',有效地强制使用--command选择这个。在这种情况下使用:

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