如何在SSH连接前启动GCE实例并确认其处于RUNNING状态
GCE实例SSH连接前自动状态校验与自启动方案
你可以通过封装gcloud指令的脚本实现全流程自动化,无需手动提前检查实例状态,脚本会自动完成状态校验、冷启动等待、SSH连接全流程。
可直接复用的Shell脚本
将脚本内的ZONE、PROJECT、INSTANCE_NAME参数替换为自身实际配置即可使用:
#!/bin/bash # 替换为你的实际GCE配置 ZONE="us-central1-a" PROJECT="your-project-id" INSTANCE_NAME="your-instance-name" # 查询实例当前运行状态 STATUS=$(gcloud compute instances describe $INSTANCE_NAME \ --zone=$ZONE \ --project=$PROJECT \ --format='value(status)') # 实例非RUNNING状态时触发启动流程 if [ "$STATUS" != "RUNNING" ]; then echo "实例当前状态为$STATUS,正在发起启动指令..." gcloud compute instances start $INSTANCE_NAME \ --zone=$ZONE \ --project=$PROJECT # 轮询等待实例进入就绪状态 echo "等待实例启动完成..." while true; do CURRENT_STATUS=$(gcloud compute instances describe $INSTANCE_NAME \ --zone=$ZONE \ --project=$PROJECT \ --format='value(status)') if [ "$CURRENT_STATUS" = "RUNNING" ]; then echo "实例已进入RUNNING状态,即将建立SSH连接" break fi sleep 2 done fi # 发起SSH连接 gcloud compute ssh --zone $ZONE --project $PROJECT $INSTANCE_NAME
使用说明
- 脚本保存后先执行
chmod +x gce_ssh.sh赋予执行权限,后续直接运行./gce_ssh.sh即可,无需提前手动启动实例 - 轮询间隔默认设为2秒,是平衡接口调用频率和等待效率的取值,可根据自身网络情况调整
sleep后的数值 - 如果需要传递SSH额外参数,直接在最后一行ssh命令末尾追加即可
极简单行Alias版本
如果不想维护单独脚本,可将以下命令替换参数后写入.bashrc/.zshrc作为全局命令使用:
alias gce-ssh='gcloud compute instances describe $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --format="value(status)" | grep -q RUNNING || gcloud compute instances start $INSTANCE_NAME --zone=$ZONE --project=$PROJECT && while [ "$(gcloud compute instances describe $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --format="value(status)")" != "RUNNING" ]; do sleep 2; done && gcloud compute ssh --zone $ZONE --project=$PROJECT $INSTANCE_NAME'
注意:使用前需确保gcloud已完成账号认证,未认证时先执行
gcloud auth login完成授权,否则状态查询、实例启动指令会执行失败。
内容的提问来源于stack exchange,提问作者Martin Zeitler
相关产品推荐
相关产品推荐

