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>
20 lines
927 B
TypeScript
20 lines
927 B
TypeScript
import ssh2 from "ssh2";
|
||
|
||
/**
|
||
* Ein ed25519-Schlüsselpaar im OpenSSH-Format, das ssh2 auch selbst wieder lesen kann.
|
||
*
|
||
* `ssh2.utils.generateKeyPairSync("ed25519")` liefert in etwa 4 von 1000 Fällen einen privaten
|
||
* Schlüssel, an dem der eigene Parser mit „Malformed OpenSSH private key“ scheitert (gemessen mit
|
||
* ssh2 1.17.0). Gespeichert wäre so ein Server-Schlüssel dauerhaft unbrauchbar – deshalb wird
|
||
* geprüft und notfalls neu erzeugt.
|
||
*/
|
||
export function ed25519Erzeugen(kommentar?: string): { privat: string; oeffentlich: string } {
|
||
for (let versuch = 0; versuch < 20; versuch += 1) {
|
||
const paar = ssh2.utils.generateKeyPairSync("ed25519", kommentar ? { comment: kommentar } : {});
|
||
if (!(ssh2.utils.parseKey(paar.private) instanceof Error)) {
|
||
return { privat: paar.private, oeffentlich: paar.public.trim() };
|
||
}
|
||
}
|
||
throw new Error("Kein lesbarer ed25519-Schlüssel erzeugt.");
|
||
}
|