mirror of https://github.com/jumpserver/jumpserver
				
				
				
			perf: 优化用户个人 ssh 公钥校验
							parent
							
								
									e939776da0
								
							
						
					
					
						commit
						a261b2de3c
					
				| 
						 | 
				
			
			@ -8,6 +8,7 @@ import string
 | 
			
		|||
import uuid
 | 
			
		||||
from typing import Callable
 | 
			
		||||
 | 
			
		||||
import sshpubkeys
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
from django.contrib.auth.hashers import check_password
 | 
			
		||||
from django.contrib.auth.models import AbstractUser
 | 
			
		||||
| 
						 | 
				
			
			@ -105,7 +106,6 @@ class AuthMixin:
 | 
			
		|||
                return ''
 | 
			
		||||
 | 
			
		||||
        if self.public_key:
 | 
			
		||||
            import sshpubkeys
 | 
			
		||||
            try:
 | 
			
		||||
                return sshpubkeys.SSHKey(self.public_key)
 | 
			
		||||
            except (TabError, TypeError):
 | 
			
		||||
| 
						 | 
				
			
			@ -153,21 +153,21 @@ class AuthMixin:
 | 
			
		|||
        return False
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def get_public_key_body(key):
 | 
			
		||||
        for i in key.split():
 | 
			
		||||
            if len(i) > 256:
 | 
			
		||||
                return i
 | 
			
		||||
        return key
 | 
			
		||||
    def get_public_key_md5(key):
 | 
			
		||||
        try:
 | 
			
		||||
            key_obj = sshpubkeys.SSHKey(key)
 | 
			
		||||
            return key_obj.hash_md5()
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            return ''
 | 
			
		||||
 | 
			
		||||
    def check_public_key(self, key):
 | 
			
		||||
        if not self.public_key:
 | 
			
		||||
            return False
 | 
			
		||||
        key = self.get_public_key_body(key)
 | 
			
		||||
        key_saved = self.get_public_key_body(self.public_key)
 | 
			
		||||
        if key == key_saved:
 | 
			
		||||
            return True
 | 
			
		||||
        else:
 | 
			
		||||
        key_md5 = self.get_public_key_md5(key)
 | 
			
		||||
        if not key_md5:
 | 
			
		||||
            return False
 | 
			
		||||
        self_key_md5 = self.get_public_key_md5(self.public_key)
 | 
			
		||||
        return key_md5 == self_key_md5
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class RoleManager(models.Manager):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue