我是Google Cloud的新手,并且在通过gcloud命令行向sata元数据(项目范围内)添加ssh键时面临挑战。
当我尝试将ssh-key和我要添加的新ssh-key一起添加到Google元数据中(使用命令:: gcloud compute project-info add-metadata --metadata-from-file ssh-keys=[LIST_PATH]
)时,我还必须在其中指定所有现有的ssh-key源文件。 (源文件是我们存储ssh-key值的文件)。因为我将添加源文件中存在的所有ssh密钥,所以如果我不将现有的ssh密钥保留在源文件中并且仅保留一个密钥,它将仅将此单个密钥添加到元数据中,其余的现有密钥将被删除。
所以我想要实现的是在不影响现有键的情况下将任何单个ssh键添加到元数据。因为这对于我环境中的许多机器都是重复的过程,所以我无法每次都跟踪现有的密钥。
答案 0 :(得分:1)
我有同样的问题。
根据官方文档(https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys),无法通过gcloud工具操作单个键。
下面是添加密钥的示例shell:
class Test {
/**
* Executes some async code
* @returns {Test} The current {@link Test}
*/
asynch() {
console.log('asynch')
return new Promise((resolve, reject) => setTimeout(resolve, 1000))
}
/**
* Executes some code
* @returns {Test} The current {@link Test}
*/
something() {
console.log('something')
return this
}
}
var TestChainable = new Proxy(Test, {
construct(target, args) {
return new Proxy(new target(...args), {
// a promise used for chaining
pendingPromise: Promise.resolve(),
get(target, key, receiver) {
// intercept each get on the object
if (key === 'then' || key === 'catch') {
// if then/catch is requested, return the chaining promise
return (...args2) => {
return this.pendingPromise[key](...args2)
}
} else if (target[key] instanceof Function) {
// otherwise chain with the "chainingPromise"
// and call the original function as soon
// as the previous call finished
return (...args2) => {
this.pendingPromise = this.pendingPromise.then(() => {
target[key](...args2)
})
console.log('calling ', key)
// return the proxy so that chaining can continue
return receiver
}
} else {
// if it is not a function then just return it
return target[key]
}
}
})
}
});
var t = new TestChainable
t.asynch()
.something()
.asynch()
.asynch()
.then(() => {
console.log('all calles are finished')
})
它:
由您决定分开的步骤,保留本地密钥列表或任何适合您的需求。
此示例缺少一些功能,例如密钥重复数据删除。目前这只是一个实验,我必须创建一个更强大的脚本以供实际使用。