From 31e037e43c2372fa6b1eb6f5e9b6830ad2f7eaa2 Mon Sep 17 00:00:00 2001 From: MickLesk Date: Wed, 27 May 2026 13:32:07 +0200 Subject: [PATCH] fix: generate key pair hangs when key files already exist (#590) ssh-keygen prompts 'Overwrite (y/n)?' on stdout when the target file exists. With stdio: ['pipe','pipe','pipe'] nothing is written to stdin, so the process blocks indefinitely. Delete both the private key and its .pub counterpart before spawning ssh-keygen so the overwrite prompt is never triggered. --- src/server/ssh-service.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/server/ssh-service.js b/src/server/ssh-service.js index 400af82..c02fcca 100644 --- a/src/server/ssh-service.js +++ b/src/server/ssh-service.js @@ -662,7 +662,14 @@ expect { async generateKeyPair(serverId) { const sshKeysDir = join(process.cwd(), 'data', 'ssh-keys'); const keyPath = join(sshKeysDir, `server_${serverId}_key`); - + const keyPubPath = keyPath + '.pub'; + + // Remove existing key files so ssh-keygen does not prompt "Overwrite (y/n)?" + // which would block stdin indefinitely. + for (const p of [keyPath, keyPubPath]) { + try { unlinkSync(p); } catch { /* file didn't exist – that's fine */ } + } + return new Promise((resolve, reject) => { const sshKeygen = spawn('ssh-keygen', [ '-t', 'ed25519',