我写了一些小代码来控制谷歌云平台上的多个计算引擎。整个文件在 github 中.
导致问题的部分是下面的gcloud compute ssh
def upload_file(self, projectname):
var = raw_input("Upload file with name: " + projectname + " will remove all file and directory with same name in the instance. Are you sure? (y/n)")
if var.lower().strip() != "y":
print "Abort uploading."
return
is_zip = False
if projectname.split('.')[1] == "zip":
is_zip = True
fullpath_projectname = __location__ + "/" + projectname
if os.path.isfile(fullpath_projectname):
all_instances = self.search_any('instances', filter="labels.type=" + self.working_group_label)
all_instances_name = [x['name'] for x in all_instances]
i = 0
for instance in all_instances_name:
temp_command = 'gcloud_command_' + str(i)
i += 1
temp_instance = user_name + "@" + instance
temp_file_path = '/home/' + user_name + '/'
command_arr = []
command_arr.append('call gcloud compute ssh ' + temp_instance + ' --zone ' + zone + ' --command "cd ' + temp_file_path + '; sudo rm -rf ' + temp_file_path + projectname.split('.')[0] + '; sudo rm -f ' + temp_file_path + projectname.split('.')[0] + '*"\n')
command_arr.append('call gcloud compute scp "' + fullpath_projectname + '" ' + temp_instance + ':' + temp_file_path + '\n')
if is_zip:
command_arr.append('call gcloud compute ssh ' + temp_instance + ' --zone ' + zone + ' ' + ' --command "cd ' + temp_file_path + '; sudo unzip ' + temp_file_path + projectname + '"' + '\n')
with open(os.path.join(__location__, 'bat/' + temp_command + '.bat'), 'w') as bat:
bat.writelines(command_arr)
subprocess.Popen(os.path.join(__location__, 'bat/' + temp_command + '.bat'), shell=True)
这部分用于将相同的文件(通常为 .zip)上传到具有相同标签的所有实例。但是在我的本地计算机上这样做会跳出很多警报,要求我保存 ssh 指纹。
像这样,
本来是自己方便的一个小工具,为了运行多个计算引擎来查询在线数据(我想有多个IP,以免被列为DDoS)。但现在我需要与其他团队分享这个,这样一捆警报就会引起其他人的困惑。
我可以手动一个一个缓存,但是给别人不方便。
我试图通过更改最后一行来解决缓存问题
proc = subprocess.Popen(os.path.join(__location__, 'bat/' + temp_command + '.bat'), shell=True)
proc.communicate(input='y')
但是这使得所有上传都只能一个接一个地进行,而且在很多情况下这都非常慢。
最佳答案
警告来自底层的 ssh 二进制文件。您可以使用 --ssh-flag
和 --scp-flag
到 gcloud compote ssh
和 gcloud compute scp
分别控制实际执行 ssh 操作的底层二进制文件的行为。
关于可能的方法的一个很好的解释是 provided here (查看已接受答案中的第一个选项)。但是,我不知道 PuTTY 是否会接受相同的语法,因此您可能必须为其寻找合适的标志值。
关于python - 如何避免 gcloud compute 警报将 key 存储在缓存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52327673/