在所有gce实例上运行ssh命令

时间:2017-06-08 22:09:20

标签: google-compute-engine

我有一堆GCE实例,我想在所有这些实例上运行相同的shell命令。是否可以执行gcloud compute ssh --command="ls -al" my-instance1 my-instance2 my-instance3

之类的操作

2 个答案:

答案 0 :(得分:2)

您可以使用gcloud compute instances list --format='value[separator=","](name,zone)'获取如下列表:

my-instance1,my-zone1
my-instance2,my-zone2
my-instance3,my-zone3

然后你可以使用bash Substring Removal来提取逗号之前和之后的部分。

var="before,after"
before="${var%,*}"
after="${var#*,}"

全部放入循环并添加尾随'&'在后台运行:

for instance in $(gcloud compute instances list --format='value[separator=","](name,zone)'); do
  name="${instance%,*}";
  zone="${instance#*,}";
  gcloud compute ssh $name --zone=$zone --command="ls -al" &
done

答案 1 :(得分:0)

要添加到Mike's answer,请执行以下操作而无需删除子字符串:

for i z in $(gcloud compute instances list --format='value(name, zone)'); do 
  gcloud compute ssh $i --command="ls -lah" --zone=$z; 
done