✨ feat(git_ssh_service):扩展SSH私钥验证以支持传统RSA PEM格式
🔧 refactor(git_ssh_service):重构私钥加载逻辑,增加格式兼容性处理
This commit is contained in:
parent
9399c01d8c
commit
b095e7aa6c
|
|
@ -94,22 +94,44 @@ class SSHKeyService:
|
||||||
验证私钥和公钥是否匹配
|
验证私钥和公钥是否匹配
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
private_key: SSH私钥(OpenSSH格式)
|
private_key: SSH私钥(支持传统RSA PEM格式或OpenSSH格式)
|
||||||
public_key: SSH公钥(OpenSSH格式)
|
public_key: SSH公钥(OpenSSH格式)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
是否匹配
|
是否匹配
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
from cryptography.hazmat.primitives.serialization import load_ssh_private_key
|
from cryptography.hazmat.primitives.serialization import (
|
||||||
|
load_ssh_private_key,
|
||||||
|
load_pem_private_key
|
||||||
|
)
|
||||||
from cryptography.hazmat.backends import default_backend
|
from cryptography.hazmat.backends import default_backend
|
||||||
|
|
||||||
# 加载私钥
|
# 尝试加载私钥(支持多种格式)
|
||||||
|
private_key_bytes = private_key.encode('utf-8')
|
||||||
|
private_key_obj = None
|
||||||
|
|
||||||
|
# 首先尝试作为OpenSSH格式加载
|
||||||
|
try:
|
||||||
private_key_obj = load_ssh_private_key(
|
private_key_obj = load_ssh_private_key(
|
||||||
private_key.encode('utf-8'),
|
private_key_bytes,
|
||||||
password=None,
|
password=None,
|
||||||
backend=default_backend()
|
backend=default_backend()
|
||||||
)
|
)
|
||||||
|
except Exception:
|
||||||
|
# 如果失败,尝试作为传统PEM格式加载(支持RSA、DSA、EC等)
|
||||||
|
try:
|
||||||
|
private_key_obj = load_pem_private_key(
|
||||||
|
private_key_bytes,
|
||||||
|
password=None,
|
||||||
|
backend=default_backend()
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[SSH] Failed to load private key: {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
if not private_key_obj:
|
||||||
|
return False
|
||||||
|
|
||||||
# 从私钥导出公钥
|
# 从私钥导出公钥
|
||||||
derived_public_key = private_key_obj.public_key()
|
derived_public_key = private_key_obj.public_key()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue