5a13e8b100bf40689b4504462d657a5a4fecceaa

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

fix: create client key and config file

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