Diff
1diff --git a/server/config/file.go b/server/config/file.go
2index 11e239fb094d30b5e06591c1f6a8603a29b331b6..b3f8c8ec91c32e0c0527d24eeaf6c4aa98e3fa34 100644
3--- a/server/config/file.go
4+++ b/server/config/file.go
5@@ -29,7 +29,7 @@ ssh:
6
7 # The path to the server's client private key. This key will be used to
8 # authenticate the server to make git requests to ssh remotes.
9- client_key_path: "{{ .Internal.ClientKeyPath }}"
10+ client_key_path: "{{ .SSH.ClientKeyPath }}"
11
12 # The maximum number of seconds a connection can take.
13 # A value of 0 means no timeout.
14diff --git a/server/server.go b/server/server.go
15index 012ea05192cf94ad8bc5f120eaf3c041a40ca62d..66a5488fb0c971c44f1eaec00b9276499733485d 100644
16--- a/server/server.go
17+++ b/server/server.go
18@@ -132,7 +132,6 @@ func (s *Server) Start() error {
19 return nil
20 })
21 errg.Go(func() error {
22- s.logger.Print("Starting cron scheduler")
23 s.Cron.Start()
24 return nil
25 })
26diff --git a/server/ssh/ssh.go b/server/ssh/ssh.go
27index 9c55aea185f4556de3ef88cd70f9d73cb4fd96b7..42e51222602770fdc056004cab503986b5dbc76e 100644
28--- a/server/ssh/ssh.go
29+++ b/server/ssh/ssh.go
30@@ -3,12 +3,15 @@ package ssh
31 import (
32 "context"
33 "errors"
34+ "fmt"
35 "net"
36+ "os"
37 "path/filepath"
38 "strconv"
39 "strings"
40 "time"
41
42+ "github.com/charmbracelet/keygen"
43 "github.com/charmbracelet/log"
44 "github.com/charmbracelet/soft-serve/server/backend"
45 cm "github.com/charmbracelet/soft-serve/server/cmd"
46@@ -81,12 +84,14 @@ type SSHServer struct {
47 // NewSSHServer returns a new SSHServer.
48 func NewSSHServer(ctx context.Context) (*SSHServer, error) {
49 cfg := config.FromContext(ctx)
50+
51 var err error
52 s := &SSHServer{
53 cfg: cfg,
54 ctx: ctx,
55 logger: log.FromContext(ctx).WithPrefix("ssh"),
56 }
57+
58 logger := s.logger.StandardLog(log.StandardLogOptions{ForceLevel: log.DebugLevel})
59 mw := []wish.Middleware{
60 rm.MiddlewareWithLogger(
61@@ -101,6 +106,7 @@ func NewSSHServer(ctx context.Context) (*SSHServer, error) {
62 lm.MiddlewareWithLogger(logger),
63 ),
64 }
65+
66 s.srv, err = wish.NewServer(
67 ssh.PublicKeyAuth(s.PublicKeyHandler),
68 ssh.KeyboardInteractiveAuth(s.KeyboardInteractiveHandler),
69@@ -115,10 +121,19 @@ func NewSSHServer(ctx context.Context) (*SSHServer, error) {
70 if cfg.SSH.MaxTimeout > 0 {
71 s.srv.MaxTimeout = time.Duration(cfg.SSH.MaxTimeout) * time.Second
72 }
73+
74 if cfg.SSH.IdleTimeout > 0 {
75 s.srv.IdleTimeout = time.Duration(cfg.SSH.IdleTimeout) * time.Second
76 }
77
78+ // Create client ssh key
79+ if _, err := os.Stat(cfg.SSH.ClientKeyPath); err != nil && os.IsNotExist(err) {
80+ _, err := keygen.New(cfg.SSH.ClientKeyPath, keygen.WithKeyType(keygen.Ed25519), keygen.WithWrite())
81+ if err != nil {
82+ return nil, fmt.Errorf("client ssh key: %w", err)
83+ }
84+ }
85+
86 return s, nil
87 }
88