fix(ssh): nur ed25519-Schlüssel speichern, die ssh2 lesen kann
ssh2.utils.generateKeyPairSync liefert in etwa 4 von 1000 Fällen einen privaten Schlüssel, an dem der eigene Parser scheitert. Ein so erzeugter Server-Schlüssel wäre dauerhaft unbrauchbar gewesen; in den Tests war es die Ursache des gelegentlich roten SSH-Tests. Refs #014 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,11 +1,10 @@
|
||||
import { utils } from "ssh2";
|
||||
import { afterEach, describe, expect, it } from "vitest";
|
||||
import { ProxmoxClient } from "@/engine/proxmox/client";
|
||||
import { erkunden } from "@/engine/proxmox/erkundung";
|
||||
import { sshAusfuehren, SshFehler } from "@/engine/ssh/verbindung";
|
||||
import { MOCK_TOKEN_GEHEIMNIS, MOCK_TOKEN_ID, ProxmoxMock } from "../proxmox-mock/mock";
|
||||
import { szenarioEinrichten, type Szenario } from "../proxmox-mock/szenario";
|
||||
import { SshMock } from "../ssh-mock";
|
||||
import { SshMock, testPaar } from "../ssh-mock";
|
||||
|
||||
const aufraeumen: Array<() => Promise<void>> = [];
|
||||
afterEach(async () => {
|
||||
@@ -102,7 +101,7 @@ describe("Verbindungstest (Erkundung)", () => {
|
||||
});
|
||||
|
||||
describe("SSH", () => {
|
||||
const paar = utils.generateKeyPairSync("ed25519");
|
||||
const paar = testPaar();
|
||||
|
||||
async function sshServer() {
|
||||
const ssh = await new SshMock(paar.public).starten();
|
||||
@@ -147,7 +146,7 @@ describe("SSH", () => {
|
||||
|
||||
it("meldet einen nicht hinterlegten Schlüssel als Anmeldefehler mit Hinweis", async () => {
|
||||
const ssh = await sshServer();
|
||||
const fremd = utils.generateKeyPairSync("ed25519");
|
||||
const fremd = testPaar();
|
||||
const fehler = (await sshAusfuehren(
|
||||
{
|
||||
host: "127.0.0.1",
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
import { utils } from "ssh2";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { ed25519Erzeugen } from "@/engine/ssh/schluessel";
|
||||
|
||||
describe("ed25519Erzeugen", () => {
|
||||
it("liefert nur Schlüssel, die ssh2 selbst lesen kann (roh scheitern etwa 4 von 1000)", () => {
|
||||
for (let i = 0; i < 1500; i++) {
|
||||
const paar = ed25519Erzeugen("test");
|
||||
expect(utils.parseKey(paar.privat)).not.toBeInstanceOf(Error);
|
||||
expect(paar.oeffentlich).toMatch(/^ssh-ed25519 \S+ test$/);
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user