From ca10ef1b443c242909cc9e4062b3bea7e8e0b3ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=91=D0=BE=D0=B1?= =?UTF-8?q?=D1=8B=D1=80=D0=B5=D0=B2?= Date: Tue, 28 Apr 2026 20:30:28 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20authorized=5Fkeys=20=D0=BE=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=D1=81=D1=8F=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=BA=D0=B0=D0=B6=D0=B4=D0=BE=D0=BC=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=B6=D0=B0=D1=82=D0=B8=D0=B8=20=C2=AB=E2=87=84=20=D0=A2=D0=BE?= =?UTF-8?q?=D0=BD=D0=BD=D0=B5=D0=BB=D1=8C=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Раньше ключ добавлялся только при первой генерации. Если его удалили вручную — повторное нажатие ⇄ не помогало. Теперь authorized_keys синхронизируется каждый раз (dedup встроен). --- server/main.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/main.py b/server/main.py index e55121e..f3118d3 100644 --- a/server/main.py +++ b/server/main.py @@ -381,7 +381,7 @@ async def tunnel_cmd(name: str, x_admin_password: str = Header("")): port += 1 rcfg["tunnel_port"] = port - # Keypair (один раз на роутер) + # Keypair — генерируем один раз, но authorized_keys обновляем всегда if not rcfg.get("tunnel_priv_key") or not rcfg.get("tunnel_pub_key"): try: priv, pub = await asyncio.to_thread(_gen_ed25519_keypair, name) @@ -391,7 +391,8 @@ async def tunnel_cmd(name: str, x_admin_password: str = Header("")): raise HTTPException(500, f"ssh-keygen упал: {e}") from e rcfg["tunnel_priv_key"] = priv rcfg["tunnel_pub_key"] = pub - await asyncio.to_thread(_add_pubkey_to_authorized_keys, name, pub) + # Всегда синхронизируем authorized_keys (защита от ручного удаления) + await asyncio.to_thread(_add_pubkey_to_authorized_keys, name, rcfg["tunnel_pub_key"]) # Одноразовый токен (10 мин) reg_token = secrets.token_urlsafe(32)