python - 如何避免 gcloud compute 警报将 key 存储在缓存中

标签 python google-cloud-platform google-compute-engine gcloud

我写了一些小代码来控制谷歌云平台上的多个计算引擎。整个文件在 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 指纹。

像这样,

Alert

本来是自己方便的一个小工具,为了运行多个计算引擎来查询在线数据(我想有多个IP,以免被列为DDoS)。但现在我需要与其他团队分享这个,这样一捆警报就会引起其他人的困惑。

我可以手动一个一个缓存,但是给别人不方便。

我试图通过更改最后一行来解决缓存问题

proc = subprocess.Popen(os.path.join(__location__, 'bat/' + temp_command + '.bat'), shell=True)
proc.communicate(input='y')

但是这使得所有上传都只能一个接一个地进行,而且在很多情况下这都非常慢。

最佳答案

警告来自底层的 ssh 二进制文件。您可以使用 --ssh-flag--scp-flaggcloud compote sshgcloud compute scp分别控制实际执行 ssh 操作的底层二进制文件的行为。

关于可能的方法的一个很好的解释是 provided here (查看已接受答案中的第一个选项)。但是,我不知道 PuTTY 是否会接受相同的语法,因此您可能必须为其寻找合适的标志值。

这些命令的完整文档可用 herehere .

关于python - 如何避免 gcloud compute 警报将 key 存储在缓存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52327673/

相关文章:

google-app-engine - 如何限制计算引擎只接受来自应用引擎的请求

python - 在数据帧中的好坏堆叠条上显示前 3 个 'bad' 系统(按一个值排序,但在图表上显示两个值)

google-cloud-platform - 如何构建 Google Cloud dataproc 边缘节点?

java - Google Cloud Platform 管道/容器构建器使用 COPY 或 ADD 命令为 Spring Boot Java 应用程序构建 docker 镜像时出现问题

python - 使用 google-cloud-python 从 BigQuery 以 JSON 格式获取结果

linux - Ubuntu VM 不会无限期地在后台运行任务

google-cloud-sql - 在google cloudSQL中我可以用my.cnf配置它吗

python - 获取文件的绝对路径为什么要遍历另一个目录

javascript - 为什么我的 Angular 前端不能将正确的 $http.get 参数传递给 Django 后端?

python - 列出奇怪的无法解释的