feat(git_ssh_service):扩展SSH私钥验证以支持传统RSA PEM格式

🔧 refactor(git_ssh_service):重构私钥加载逻辑,增加格式兼容性处理
This commit is contained in:
Image 2025-12-25 15:13:53 +08:00
parent 9399c01d8c
commit b095e7aa6c
1 changed files with 30 additions and 8 deletions

View File

@ -94,22 +94,44 @@ class SSHKeyService:
验证私钥和公钥是否匹配
Args:
private_key: SSH私钥OpenSSH格式
private_key: SSH私钥支持传统RSA PEM格式或OpenSSH格式
public_key: SSH公钥OpenSSH格式
Returns:
是否匹配
"""
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
# 加载私钥
# 尝试加载私钥(支持多种格式)
private_key_bytes = private_key.encode('utf-8')
private_key_obj = None
# 首先尝试作为OpenSSH格式加载
try:
private_key_obj = load_ssh_private_key(
private_key.encode('utf-8'),
private_key_bytes,
password=None,
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()