web-dev-qa-db-fra.com

gcloud compute execute command à distance

Actuellement, si je veux exécuter quelque chose sur une machine virtuelle, je copie des fichiers comme ceci:

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

Ensuite, je dois SSH manuellement comme ceci:

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

Et puis allez exécuter une commande:

cd /some/path
python example.py

Comment combiner les étapes 2 et 3 ensemble et exécuter une commande à distance?

Remarque: je veux utiliser gcloud ou l'api python. Je ne veux pas utiliser de packages tiers comme Fabric.

20
Roman

Essayer:

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

De 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
30
Zachary Newman

Une mise à jour de gcloud qui a atterri il y a une semaine a bloqué le passage des commandes ssh après "-" et force effectivement l'utilisation de --command option pour cela. Dans ce cas, utilisez:

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

24
Doru C.

L'a fait avec un peu de tangente; en utilisant le client ssh normal au lieu de gcloud compute:

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

La clé gcloud ssh se trouve à ~/.ssh/google_compute_engine, qu'il utilise. Il requiert également l'adresse IP externe de l'instance au lieu de son nom.

2
Roman