mirror of https://github.com/jumpserver/jumpserver
fix: 修复 ssh 私钥推送等问题
parent
024beca690
commit
8979228e0b
|
@ -1,6 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
import io
|
|
||||||
import os
|
import os
|
||||||
import uuid
|
import uuid
|
||||||
from hashlib import md5
|
from hashlib import md5
|
||||||
|
@ -18,7 +17,9 @@ from common.utils import random_string
|
||||||
from common.utils import (
|
from common.utils import (
|
||||||
ssh_key_string_to_obj, ssh_key_gen, get_logger, lazyproperty
|
ssh_key_string_to_obj, ssh_key_gen, get_logger, lazyproperty
|
||||||
)
|
)
|
||||||
from common.utils.encode import parse_ssh_public_key_str
|
from common.utils.encode import (
|
||||||
|
parse_ssh_public_key_str, parse_ssh_private_key_str
|
||||||
|
)
|
||||||
from orgs.mixins.models import OrgModelMixin
|
from orgs.mixins.models import OrgModelMixin
|
||||||
|
|
||||||
logger = get_logger(__file__)
|
logger = get_logger(__file__)
|
||||||
|
@ -86,24 +87,27 @@ class AuthMixin:
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def private_key_file(self):
|
def private_key_file(self):
|
||||||
if not self.private_key_obj:
|
if not self.private_key:
|
||||||
|
return None
|
||||||
|
private_key_str = parse_ssh_private_key_str(self.private_key,
|
||||||
|
password=self.password)
|
||||||
|
if not private_key_str:
|
||||||
return None
|
return None
|
||||||
project_dir = settings.PROJECT_DIR
|
project_dir = settings.PROJECT_DIR
|
||||||
tmp_dir = os.path.join(project_dir, 'tmp')
|
tmp_dir = os.path.join(project_dir, 'tmp')
|
||||||
key_name = '.' + md5(self.private_key.encode('utf-8')).hexdigest()
|
key_name = '.' + md5(self.private_key.encode('utf-8')).hexdigest()
|
||||||
key_path = os.path.join(tmp_dir, key_name)
|
key_path = os.path.join(tmp_dir, key_name)
|
||||||
if not os.path.exists(key_path):
|
if not os.path.exists(key_path):
|
||||||
self.private_key_obj.write_private_key_file(key_path)
|
with open(key_path, 'w') as f:
|
||||||
|
f.write(private_key_str)
|
||||||
os.chmod(key_path, 0o400)
|
os.chmod(key_path, 0o400)
|
||||||
return key_path
|
return key_path
|
||||||
|
|
||||||
def get_private_key(self):
|
def get_private_key(self):
|
||||||
if not self.private_key_obj:
|
if not self.private_key:
|
||||||
return None
|
return None
|
||||||
string_io = io.StringIO()
|
return parse_ssh_private_key_str(self.private_key,
|
||||||
self.private_key_obj.write_private_key(string_io)
|
password=self.password)
|
||||||
private_key = string_io.getvalue()
|
|
||||||
return private_key
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def public_key_obj(self):
|
def public_key_obj(self):
|
||||||
|
|
|
@ -79,7 +79,7 @@ _supported_paramiko_ssh_key_types = (
|
||||||
def ssh_key_string_to_obj(text, password=None):
|
def ssh_key_string_to_obj(text, password=None):
|
||||||
key = None
|
key = None
|
||||||
for ssh_key_type in _supported_paramiko_ssh_key_types:
|
for ssh_key_type in _supported_paramiko_ssh_key_types:
|
||||||
if not isinstance(ssh_key_type, paramiko.PKey):
|
if not issubclass(ssh_key_type, paramiko.PKey):
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
key = ssh_key_type.from_private_key(StringIO(text), password=password)
|
key = ssh_key_type.from_private_key(StringIO(text), password=password)
|
||||||
|
|
Loading…
Reference in New Issue