From 1cd81ed58b331aae35050eea652ad49d55e4ae78 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Thu, 21 Mar 2019 09:36:40 +0100 Subject: [PATCH] parse SSH keys line-wise, skip empty/comments fixes #3 --- breakglass.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/breakglass.go b/breakglass.go index 6808e68..8f4870e 100644 --- a/breakglass.go +++ b/breakglass.go @@ -3,12 +3,15 @@ package main import ( + "bufio" + "bytes" "flag" "fmt" "io/ioutil" "log" "net" "os" + "strings" "syscall" "github.com/gokrazy/gokrazy" @@ -34,13 +37,19 @@ func loadAuthorizedKeys(path string) (map[string]bool, error) { result := make(map[string]bool) - for len(b) > 0 { - pubKey, _, _, rest, err := ssh.ParseAuthorizedKey(b) + s := bufio.NewScanner(bytes.NewReader(b)) + for s.Scan() { + if tr := strings.TrimSpace(s.Text()); tr == "" || strings.HasPrefix(tr, "#") { + continue + } + pubKey, _, _, _, err := ssh.ParseAuthorizedKey(s.Bytes()) if err != nil { return nil, err } result[string(pubKey.Marshal())] = true - b = rest + } + if err := s.Err(); err != nil { + return nil, err } return result, nil