From 0177f74dc612ab6e1fe6c29f7aecdcb810eaf05a Mon Sep 17 00:00:00 2001 From: Ashley Cui Date: Mon, 12 Aug 2024 11:04:21 -0400 Subject: [PATCH] pkg/machine: Read stderr from ssh-keygen correctly Read stderr from ssh-keygen before calling wait(), since cmd.Wait() closes cmd.StderrPipe() after it exits, causing a read-on-closed-pipe error. Signed-off-by: Ashley Cui --- pkg/machine/keys.go | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/pkg/machine/keys.go b/pkg/machine/keys.go index e4c37cb57c..135dda4e05 100644 --- a/pkg/machine/keys.go +++ b/pkg/machine/keys.go @@ -3,9 +3,9 @@ package machine import ( + "bytes" "errors" "fmt" - "io" "os" "os/exec" "path/filepath" @@ -71,22 +71,18 @@ func CreateSSHKeysPrefix(identityPath string, passThru bool, skipExisting bool, func generatekeys(writeLocation string) error { args := append(append([]string{}, sshCommand[1:]...), writeLocation) cmd := exec.Command(sshCommand[0], args...) - stdErr, err := cmd.StderrPipe() - if err != nil { - return err - } + stdErr := &bytes.Buffer{} + cmd.Stderr = stdErr + if err := cmd.Start(); err != nil { return err } waitErr := cmd.Wait() - if waitErr == nil { - return nil + if waitErr != nil { + return fmt.Errorf("failed to generate keys: %s: %w", strings.TrimSpace(stdErr.String()), waitErr) } - errMsg, err := io.ReadAll(stdErr) - if err != nil { - return fmt.Errorf("key generation failed, unable to read from stderr: %w", waitErr) - } - return fmt.Errorf("failed to generate keys: %s: %w", string(errMsg), waitErr) + + return nil } // generatekeys creates an ed25519 set of keys