mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-12-21 11:33:03 +00:00
merge with dev
This commit is contained in:
75
jperm/utils.py
Normal file
75
jperm/utils.py
Normal file
@@ -0,0 +1,75 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import random
|
||||
import os.path
|
||||
import shutil
|
||||
from paramiko import SSHException
|
||||
from paramiko.rsakey import RSAKey
|
||||
from jumpserver.api import mkdir
|
||||
from uuid import uuid4
|
||||
from jumpserver.api import CRYPTOR
|
||||
from os import makedirs
|
||||
|
||||
from tempfile import NamedTemporaryFile
|
||||
|
||||
from jumpserver.settings import KEY_DIR
|
||||
|
||||
|
||||
def get_rand_pass():
|
||||
"""
|
||||
get a reandom password.
|
||||
"""
|
||||
CRYPTOR.gen_rand_pass(20)
|
||||
|
||||
|
||||
def updates_dict(*args):
|
||||
"""
|
||||
surport update multi dict
|
||||
"""
|
||||
result = {}
|
||||
for d in args:
|
||||
result.update(d)
|
||||
return result
|
||||
|
||||
|
||||
def gen_keys(key="", key_path_dir=""):
|
||||
"""
|
||||
在KEY_DIR下创建一个 uuid命名的目录,
|
||||
并且在该目录下 生产一对秘钥
|
||||
:return: 返回目录名(uuid)
|
||||
"""
|
||||
key_basename = "key-" + uuid4().hex
|
||||
if not key_path_dir:
|
||||
key_path_dir = os.path.join(KEY_DIR, 'role_key', key_basename)
|
||||
private_key = os.path.join(key_path_dir, 'id_rsa')
|
||||
public_key = os.path.join(key_path_dir, 'id_rsa.pub')
|
||||
mkdir(key_path_dir, mode=0755)
|
||||
if not key:
|
||||
key = RSAKey.generate(2048)
|
||||
key.write_private_key_file(private_key)
|
||||
else:
|
||||
key_file = os.path.join(key_path_dir, 'id_rsa')
|
||||
with open(key_file, 'w') as f:
|
||||
f.write(key)
|
||||
f.close()
|
||||
with open(key_file) as f:
|
||||
try:
|
||||
key = RSAKey.from_private_key(f)
|
||||
except SSHException:
|
||||
shutil.rmtree(key_path_dir, ignore_errors=True)
|
||||
raise SSHException
|
||||
os.chmod(private_key, 0644)
|
||||
|
||||
with open(public_key, 'w') as content_file:
|
||||
for data in [key.get_name(),
|
||||
" ",
|
||||
key.get_base64(),
|
||||
" %s@%s" % ("jumpserver", os.uname()[1])]:
|
||||
content_file.write(data)
|
||||
return key_path_dir
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print gen_keys()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user