# -*- coding: utf-8 -*- import random import os.path from Crypto.PublicKey import RSA from os import chmod, mkdir from uuid import uuid4 PERM_DIR = os.path.dirname(os.path.abspath(__file__)) KEY_DIR = os.path.join(PERM_DIR, 'role_keys') def get_rand_pass(): """ get a reandom password. """ lower = [chr(i) for i in range(97,123)] upper = [chr(i).upper() for i in range(97,123)] digit = [str(i) for i in range(10)] password_pool = [] password_pool.extend(lower) password_pool.extend(upper) password_pool.extend(digit) pass_list = [random.choice(password_pool) for i in range(1,14)] pass_list.insert(random.choice(range(1,14)), '@') pass_list.insert(random.choice(range(1,14)), random.choice(digit)) password = ''.join(pass_list) return password def updates_dict(*args): """ surport update multi dict """ result = {} for d in args: result.update(d) return result def gen_keys(): """ 在KEY_DIR下创建一个 uuid命名的目录, 并且在该目录下 生产一对秘钥 :return: 返回目录名(uuid) """ key_basename = "keys-" + uuid4().hex key_path_dir = os.path.join(KEY_DIR, key_basename) mkdir(key_path_dir, 0700) key = RSA.generate(4096) private_key = os.path.join(key_path_dir, 'id_rsa') public_key = os.path.join(key_path_dir, 'id_rsa.pub') with open(private_key, 'w') as content_file: content_file.write(key.exportKey('PEM')) with open(public_key, 'w') as content_file: content_file.write(key.publickey().exportKey('OpenSSH')) return key_path_dir if __name__ == "__main__": print gen_keys()