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.
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
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'
.
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.