Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform Gcloud-无法使用一个服务帐户配置多个VM_Google Cloud Platform_Cloud_Gcloud_Google Iam - Fatal编程技术网

Google cloud platform Gcloud-无法使用一个服务帐户配置多个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

我正在使用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-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