- 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
+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