repos / pico

pico services mono repo
git clone https://github.com/picosh/pico.git

commit
564cdc5
parent
7f17f63
author
Antonio Mika
date
2025-03-30 12:59:34 -0400 EDT
Only add host key if it's not empty
1 files changed,  +46, -44
M pkg/pssh/server.go
+46, -44
  1@@ -630,65 +630,67 @@ func NewSSHServerWithConfig(
  2 		server.Config.PromListenAddr = fmt.Sprintf("%s:%s", host, promPort)
  3 	}
  4 
  5-	pemBytes, err := os.ReadFile(hostKey)
  6-	if err != nil {
  7-		logger.Error("failed to read private key file", "error", err)
  8-		if !os.IsNotExist(err) {
  9-			return nil, err
 10-		}
 11+	if hostKey != "" {
 12+		pemBytes, err := os.ReadFile(hostKey)
 13+		if err != nil {
 14+			logger.Error("failed to read private key file", "error", err)
 15+			if !os.IsNotExist(err) {
 16+				return nil, err
 17+			}
 18 
 19-		logger.Info("generating new private key")
 20+			logger.Info("generating new private key")
 21 
 22-		pubKey, privKey, err := ed25519.GenerateKey(rand.Reader)
 23-		if err != nil {
 24-			logger.Error("failed to generate private key", "error", err)
 25-			return nil, err
 26-		}
 27+			pubKey, privKey, err := ed25519.GenerateKey(rand.Reader)
 28+			if err != nil {
 29+				logger.Error("failed to generate private key", "error", err)
 30+				return nil, err
 31+			}
 32 
 33-		privb, err := ssh.MarshalPrivateKey(privKey, "")
 34-		if err != nil {
 35-			logger.Error("failed to marshal private key", "error", err)
 36-			return nil, err
 37-		}
 38+			privb, err := ssh.MarshalPrivateKey(privKey, "")
 39+			if err != nil {
 40+				logger.Error("failed to marshal private key", "error", err)
 41+				return nil, err
 42+			}
 43 
 44-		block := &pem.Block{
 45-			Type:  "OPENSSH PRIVATE KEY",
 46-			Bytes: privb.Bytes,
 47-		}
 48+			block := &pem.Block{
 49+				Type:  "OPENSSH PRIVATE KEY",
 50+				Bytes: privb.Bytes,
 51+			}
 52 
 53-		if err = os.MkdirAll(path.Dir(hostKey), 0700); err != nil {
 54-			logger.Error("failed to create ssh_data directory", "error", err)
 55-			return nil, err
 56-		}
 57+			if err = os.MkdirAll(path.Dir(hostKey), 0700); err != nil {
 58+				logger.Error("failed to create ssh_data directory", "error", err)
 59+				return nil, err
 60+			}
 61 
 62-		pemBytes = pem.EncodeToMemory(block)
 63+			pemBytes = pem.EncodeToMemory(block)
 64 
 65-		if err = os.WriteFile(hostKey, pemBytes, 0600); err != nil {
 66-			logger.Error("failed to write private key", "error", err)
 67-			return nil, err
 68-		}
 69+			if err = os.WriteFile(hostKey, pemBytes, 0600); err != nil {
 70+				logger.Error("failed to write private key", "error", err)
 71+				return nil, err
 72+			}
 73 
 74-		sshPubKey, err := ssh.NewPublicKey(pubKey)
 75-		if err != nil {
 76-			logger.Error("failed to create public key", "error", err)
 77-			return nil, err
 78+			sshPubKey, err := ssh.NewPublicKey(pubKey)
 79+			if err != nil {
 80+				logger.Error("failed to create public key", "error", err)
 81+				return nil, err
 82+			}
 83+
 84+			pubb := ssh.MarshalAuthorizedKey(sshPubKey)
 85+			if err = os.WriteFile(fmt.Sprintf("%s.pub", hostKey), pubb, 0600); err != nil {
 86+				logger.Error("failed to write public key", "error", err)
 87+				return nil, err
 88+			}
 89 		}
 90 
 91-		pubb := ssh.MarshalAuthorizedKey(sshPubKey)
 92-		if err = os.WriteFile(fmt.Sprintf("%s.pub", hostKey), pubb, 0600); err != nil {
 93-			logger.Error("failed to write public key", "error", err)
 94+		signer, err := ssh.ParsePrivateKey(pemBytes)
 95+		if err != nil {
 96+			logger.Error("failed to parse private key", "error", err)
 97 			return nil, err
 98 		}
 99-	}
100 
101-	signer, err := ssh.ParsePrivateKey(pemBytes)
102-	if err != nil {
103-		logger.Error("failed to parse private key", "error", err)
104-		return nil, err
105+		server.Config.AddHostKey(signer)
106 	}
107 
108-	server.Config.AddHostKey(signer)
109-
110 	return server, nil
111 }
112