parse SSH keys line-wise, skip empty/comments

fixes #3
This commit is contained in:
Michael Stapelberg 2019-03-21 09:36:40 +01:00
parent d3f89caa0a
commit 1cd81ed58b

View File

@ -3,12 +3,15 @@
package main package main
import ( import (
"bufio"
"bytes"
"flag" "flag"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"log" "log"
"net" "net"
"os" "os"
"strings"
"syscall" "syscall"
"github.com/gokrazy/gokrazy" "github.com/gokrazy/gokrazy"
@ -34,13 +37,19 @@ func loadAuthorizedKeys(path string) (map[string]bool, error) {
result := make(map[string]bool) result := make(map[string]bool)
for len(b) > 0 { s := bufio.NewScanner(bytes.NewReader(b))
pubKey, _, _, rest, err := ssh.ParseAuthorizedKey(b) for s.Scan() {
if tr := strings.TrimSpace(s.Text()); tr == "" || strings.HasPrefix(tr, "#") {
continue
}
pubKey, _, _, _, err := ssh.ParseAuthorizedKey(s.Bytes())
if err != nil { if err != nil {
return nil, err return nil, err
} }
result[string(pubKey.Marshal())] = true result[string(pubKey.Marshal())] = true
b = rest }
if err := s.Err(); err != nil {
return nil, err
} }
return result, nil return result, nil