From 650c913930a5706e96d9ad31eb2f4102cc387f02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Cluseau?= Date: Sun, 17 Dec 2023 15:33:56 +0100 Subject: [PATCH] ssh: load more host key formats than rsa --- bootstrap.go | 1 + ssh.go | 27 +++++++++++++++++++-------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/bootstrap.go b/bootstrap.go index 7131bdf..b4ad15e 100644 --- a/bootstrap.go +++ b/bootstrap.go @@ -133,6 +133,7 @@ func setUserPass(user, passwordHash string) { p := strings.Split(line, ":") if len(p) < 2 || p[0] != user { buf.WriteString(line) + buf.WriteByte('\n') continue } diff --git a/ssh.go b/ssh.go index b053c89..46f212b 100644 --- a/ssh.go +++ b/ssh.go @@ -23,18 +23,29 @@ func startSSH(cfg *config.Config) { PublicKeyCallback: sshCheckPubkey, } - pkBytes, err := os.ReadFile("/id_rsa") // TODO configurable - if err != nil { - fatalf("ssh: failed to load private key: %v", err) + hostKeyLoaded := false + + for _, format := range []string{"rsa", "dsa", "ecdsa", "ed25519"} { + pkBytes, err := os.ReadFile("/id_" + format) + if err != nil { + log.Printf("ssh : failed to load %s host key: %v", format, err) + continue + } + + pk, err := ssh.ParsePrivateKey(pkBytes) + if err != nil { + log.Printf("ssh: failed to parse %s host key: %v", format, err) + continue + } + + sshConfig.AddHostKey(pk) + hostKeyLoaded = true } - pk, err := ssh.ParsePrivateKey(pkBytes) - if err != nil { - fatalf("ssh: failed to parse private key: %v", err) + if !hostKeyLoaded { + fatalf("ssh: failed to load any host key") } - sshConfig.AddHostKey(pk) - sshBind := ":22" // TODO configurable listener, err := net.Listen("tcp", sshBind) if err != nil {