Google cloud platform Gcloud-无法使用一个服务帐户配置多个VM
我正在使用Gcloud运行Prow(持续集成服务器)。我的一项工作是创建一个虚拟机,执行一些测试,然后删除该实例。我使用服务帐户创建VM,运行测试Google cloud platform Gcloud-无法使用一个服务帐户配置多个VM,google-cloud-platform,cloud,gcloud,google-iam,Google Cloud Platform,Cloud,Gcloud,Google Iam,我正在使用Gcloud运行Prow(持续集成服务器)。我的一项工作是创建一个虚拟机,执行一些测试,然后删除该实例。我使用服务帐户创建VM,运行测试 #!/bin/bash set -o errexit cleanup() { gcloud compute instances delete kyma-integration-test-${RANDOM_ID} } gcloud config set project ... gcloud auth activate-service-a
#!/bin/bash
set -o errexit
cleanup() {
gcloud compute instances delete kyma-integration-test-${RANDOM_ID}
}
gcloud config set project ...
gcloud auth activate-service-account --key-file ...
gcloud compute instances create <vm_name> \
--metadata enable-oslogin=TRUE \
--image debian-9-stretch-v20181009 \
--image-project debian-cloud --machine-type n1-standard-4 --boot-disk-size 20 \
trap cleanup exit
gcloud compute scp --strict-host-key-checking=no --quiet <script.sh> <vm_name>:~/<script.sh>
gcloud compute ssh --quiet <vm_name> -- ./<script.sh>
实际上,对于该服务帐户,descripe
命令返回大量数据,例如sshPublicKeys
部分中的70个条目
gcloud身份验证激活服务帐户--密钥文件。。。
gcloud计算操作系统登录描述配置文件
大多数公钥都引用已删除的VM实例。如何执行此列表的清理?或者可以根本不存储公钥吗?这些密钥存储在您的yo中,您可以通过Google控制台UI删除它们,正如您在问题中提到的OS登录:有一种方法可以使用从用户配置文件中删除特定SSH密钥。或者,与执行SCP不同,我建议您(就像John Hanley所做的那样)将要复制的文件放入存储中的实例中,并通过启动脚本检索它(您也可以使用自定义计算映像)。执行上述操作的一种非常粗糙的方法对我来说非常有效:
for i in $(gcloud compute os-login ssh-keys list); do echo $i; gcloud compute os-login ssh-keys remove --key $i; done
在删除了几十个键之后,我停止了这项操作(使用Control-C),然后它再次工作
实际上,在GUI中的项目元数据中,我没有看到太多的键。仅:
- gke…cidr:网络名称
- sshKeys:gke-e9
- SSH-Keys=>peter\u v:SSH-rsa-my-public-key
——ssh密钥在30秒后过期。
您仍然需要使用上面的解决方案清理现有的密钥,或者像这样使用一些命令功夫(没有grep)
for i in$(gcloud compute os登录ssh密钥列表--format=“table[no heading](value.fingerprint)”;做
echo$i;
gcloud compute os登录ssh密钥移除——密钥$i | | true;
完成
注意:您必须使用有问题的帐户gcloud config account activate account
和/或gcloud auth activate service account--key file=file
或gcloud auth login
脚本中需要新的ssh密钥:
#KEYNAME应该类似于$HOME/.ssh/google\u compute\u引擎
ssh-keygen-t rsa-N”“-f“${KEYNAME}”-C“${USERNAME}”| | true
chmod 400${KEYNAME}*
cat>ssh-keys我不会使用scp将文件复制到实例,也不会使用ssh连接以运行脚本。将您实例的文件放在云存储上,然后使用元数据启动脚本下载文件并运行脚本。谢谢,使用gcloud版本的Google Cloud SDK 331.0.0 alpha 2021.03.05 beta 2021.03.05 bq 2.0.65 core 2021.03.05 gsutil 4.59,此命令运行得非常好
for i in $(gcloud compute os-login ssh-keys list); do echo $i; gcloud compute os-login ssh-keys remove --key $i; done