repos / pico

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

commit
219dd1d
parent
f228cf1
author
Antonio Mika
date
2025-03-12 21:36:26 -0400 EDT
Bring back anon auth for pipe and pico
8 files changed,  +78, -34
M pkg/apps/feeds/ssh.go
+5, -2
 1@@ -20,10 +20,12 @@ import (
 2 )
 3 
 4 func StartSshServer() {
 5+	appName := "feeds-ssh"
 6+
 7 	host := utils.GetEnv("FEEDS_HOST", "0.0.0.0")
 8 	port := utils.GetEnv("FEEDS_SSH_PORT", "2222")
 9 	promPort := utils.GetEnv("FEEDS_PROM_PORT", "9222")
10-	cfg := NewConfigSite("feeds-ssh")
11+	cfg := NewConfigSite(appName)
12 	logger := cfg.Logger
13 
14 	ctx, cancel := context.WithCancel(context.Background())
15@@ -48,6 +50,7 @@ func StartSshServer() {
16 	server, err := pssh.NewSSHServerWithConfig(
17 		ctx,
18 		logger,
19+		appName,
20 		host,
21 		port,
22 		promPort,
23@@ -76,7 +79,7 @@ func StartSshServer() {
24 	done := make(chan os.Signal, 1)
25 
26 	signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
27-	logger.Info("Starting SSH server", "host", host, "port", port)
28+	logger.Info("Starting SSH server", "addr", server.Config.ListenAddr)
29 	go func() {
30 		if err = server.ListenAndServe(); err != nil {
31 			logger.Error("serve", "err", err.Error())
M pkg/apps/pastes/ssh.go
+5, -2
 1@@ -20,10 +20,12 @@ import (
 2 )
 3 
 4 func StartSshServer() {
 5+	appName := "pastes-ssh"
 6+
 7 	host := utils.GetEnv("PASTES_HOST", "0.0.0.0")
 8 	port := utils.GetEnv("PASTES_SSH_PORT", "2222")
 9 	promPort := utils.GetEnv("PASTES_PROM_PORT", "9222")
10-	cfg := NewConfigSite("pastes-ssh")
11+	cfg := NewConfigSite(appName)
12 	logger := cfg.Logger
13 
14 	ctx, cancel := context.WithCancel(context.Background())
15@@ -46,6 +48,7 @@ func StartSshServer() {
16 	server, err := pssh.NewSSHServerWithConfig(
17 		ctx,
18 		logger,
19+		appName,
20 		host,
21 		port,
22 		promPort,
23@@ -73,7 +76,7 @@ func StartSshServer() {
24 
25 	done := make(chan os.Signal, 1)
26 	signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
27-	logger.Info("Starting SSH server", "host", host, "port", port)
28+	logger.Info("Starting SSH server", "addr", server.Config.ListenAddr)
29 	go func() {
30 		if err = server.ListenAndServe(); err != nil {
31 			logger.Error("serve", "err", err.Error())
M pkg/apps/pgs/ssh.go
+2, -2
 1@@ -45,6 +45,7 @@ func StartSshServer(cfg *PgsConfig, killCh chan error) {
 2 	server, err := pssh.NewSSHServerWithConfig(
 3 		ctx,
 4 		logger,
 5+		"pgs-ssh",
 6 		host,
 7 		port,
 8 		promPort,
 9@@ -75,8 +76,7 @@ func StartSshServer(cfg *PgsConfig, killCh chan error) {
10 
11 	done := make(chan os.Signal, 1)
12 	signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
13-	logger.Info("starting SSH server on", "host", host, "port", port)
14-
15+	logger.Info("Starting SSH server", "addr", server.Config.ListenAddr)
16 	go func() {
17 		if err = server.ListenAndServe(); err != nil {
18 			logger.Error("serve", "err", err.Error())
M pkg/apps/pico/ssh.go
+18, -3
 1@@ -18,6 +18,7 @@ import (
 2 	"github.com/picosh/pico/pkg/shared"
 3 	"github.com/picosh/pico/pkg/tui"
 4 	"github.com/picosh/utils"
 5+	"golang.org/x/crypto/ssh"
 6 )
 7 
 8 func createTui(shrd *tui.SharedModel) pssh.SSHServerMiddleware {
 9@@ -37,10 +38,12 @@ func createTui(shrd *tui.SharedModel) pssh.SSHServerMiddleware {
10 }
11 
12 func StartSshServer() {
13+	appName := "pico-ssh"
14+
15 	host := utils.GetEnv("PICO_HOST", "0.0.0.0")
16 	port := utils.GetEnv("PICO_SSH_PORT", "2222")
17 	promPort := utils.GetEnv("PICO_PROM_PORT", "9222")
18-	cfg := NewConfigSite("pico-ssh")
19+	cfg := NewConfigSite(appName)
20 	logger := cfg.Logger
21 
22 	ctx, cancel := context.WithCancel(context.Background())
23@@ -65,10 +68,22 @@ func StartSshServer() {
24 	server, err := pssh.NewSSHServerWithConfig(
25 		ctx,
26 		logger,
27+		appName,
28 		host,
29 		port,
30 		promPort,
31-		sshAuth.PubkeyAuthHandler,
32+		func(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) {
33+			perms, _ := sshAuth.PubkeyAuthHandler(conn, key)
34+			if perms == nil {
35+				perms = &ssh.Permissions{
36+					Extensions: map[string]string{
37+						"pubkey": utils.KeyForKeyText(key),
38+					},
39+				}
40+			}
41+
42+			return perms, nil
43+		},
44 		[]pssh.SSHServerMiddleware{
45 			pipe.Middleware(handler, ""),
46 			list.Middleware(handler),
47@@ -103,7 +118,7 @@ func StartSshServer() {
48 
49 	done := make(chan os.Signal, 1)
50 	signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
51-	logger.Info("starting SSH server on", "host", host, "port", port)
52+	logger.Info("Starting SSH server", "addr", server.Config.ListenAddr)
53 	go func() {
54 		if err = server.ListenAndServe(); err != nil {
55 			logger.Error("serve", "err", err.Error())
M pkg/apps/pipe/ssh.go
+18, -3
 1@@ -12,14 +12,17 @@ import (
 2 	"github.com/picosh/pico/pkg/shared"
 3 	psub "github.com/picosh/pubsub"
 4 	"github.com/picosh/utils"
 5+	"golang.org/x/crypto/ssh"
 6 )
 7 
 8 func StartSshServer() {
 9+	appName := "pipe-ssh"
10+
11 	host := utils.GetEnv("PIPE_HOST", "0.0.0.0")
12 	port := utils.GetEnv("PIPE_SSH_PORT", "2222")
13 	portOverride := utils.GetEnv("PIPE_SSH_PORT_OVERRIDE", port)
14 	promPort := utils.GetEnv("PIPE_PROM_PORT", "9222")
15-	cfg := NewConfigSite("pipe-ssh")
16+	cfg := NewConfigSite(appName)
17 	logger := cfg.Logger
18 
19 	ctx, cancel := context.WithCancel(context.Background())
20@@ -47,10 +50,22 @@ func StartSshServer() {
21 	server, err := pssh.NewSSHServerWithConfig(
22 		ctx,
23 		logger,
24+		appName,
25 		host,
26 		port,
27 		promPort,
28-		sshAuth.PubkeyAuthHandler,
29+		func(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) {
30+			perms, _ := sshAuth.PubkeyAuthHandler(conn, key)
31+			if perms == nil {
32+				perms = &ssh.Permissions{
33+					Extensions: map[string]string{
34+						"pubkey": utils.KeyForKeyText(key),
35+					},
36+				}
37+			}
38+
39+			return perms, nil
40+		},
41 		[]pssh.SSHServerMiddleware{
42 			WishMiddleware(handler),
43 			pssh.LogMiddleware(handler, dbh),
44@@ -66,7 +81,7 @@ func StartSshServer() {
45 
46 	done := make(chan os.Signal, 1)
47 	signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
48-	logger.Info("Starting SSH server", "host", host, "port", port)
49+	logger.Info("Starting SSH server", "addr", server.Config.ListenAddr)
50 	go func() {
51 		if err = server.ListenAndServe(); err != nil {
52 			logger.Error("serve", "err", err.Error())
M pkg/apps/prose/ssh.go
+5, -2
 1@@ -22,10 +22,12 @@ import (
 2 )
 3 
 4 func StartSshServer() {
 5+	appName := "prose-ssh"
 6+
 7 	host := utils.GetEnv("PROSE_HOST", "0.0.0.0")
 8 	port := utils.GetEnv("PROSE_SSH_PORT", "2222")
 9 	promPort := utils.GetEnv("PROSE_PROM_PORT", "9222")
10-	cfg := NewConfigSite("prose-ssh")
11+	cfg := NewConfigSite(appName)
12 	logger := cfg.Logger
13 
14 	ctx, cancel := context.WithCancel(context.Background())
15@@ -65,6 +67,7 @@ func StartSshServer() {
16 	server, err := pssh.NewSSHServerWithConfig(
17 		ctx,
18 		logger,
19+		appName,
20 		host,
21 		port,
22 		promPort,
23@@ -92,7 +95,7 @@ func StartSshServer() {
24 
25 	done := make(chan os.Signal, 1)
26 	signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
27-	logger.Info("Starting SSH server", "host", host, "port", port)
28+	logger.Info("Starting SSH server", "addr", server.Config.ListenAddr)
29 	go func() {
30 		if err = server.ListenAndServe(); err != nil {
31 			logger.Error("serve", "err", err.Error())
M pkg/pssh/pty.go
+1, -1
1@@ -13,7 +13,7 @@ func DeprecatedNotice() SSHServerMiddleware {
2 	return func(next SSHServerHandler) SSHServerHandler {
3 		return func(sesh *SSHServerConnSession) error {
4 			msg := fmt.Sprintf(
5-				"%s\n\nRun %s to access pico's TUI",
6+				"%s\r\n\r\nRun %s to access pico's TUI",
7 				"DEPRECATED",
8 				"ssh pico.sh",
9 			)
M pkg/pssh/server.go
+24, -19
 1@@ -277,18 +277,20 @@ func (s *SSHServer) ListenAndServe() error {
 2 
 3 			go func() {
 4 				<-s.Ctx.Done()
 5-				s.Logger.Info("prometheus server shutting down")
 6+				s.Logger.Info("Prometheus server shutting down")
 7 				srv.Close()
 8 			}()
 9 
10+			s.Logger.Info("Starting Prometheus server", "addr", s.Config.PromListenAddr)
11+
12 			err := srv.ListenAndServe()
13 			if err != nil {
14 				if errors.Is(err, http.ErrServerClosed) {
15-					s.Logger.Info("prometheus server shut down")
16+					s.Logger.Info("Prometheus server shut down")
17 					return
18 				}
19 
20-				s.Logger.Error("prometheus", "err", err)
21+				s.Logger.Error("Prometheus serve error", "err", err)
22 				panic(err)
23 			}
24 		}()
25@@ -466,23 +468,25 @@ func NewSSHServer(ctx context.Context, logger *slog.Logger, config *SSHServerCon
26 								return
27 							}
28 
29-							var payload = struct{ Value string }{}
30-							err := ssh.Unmarshal(req.Payload, &payload)
31-							if err != nil {
32-								sc.Logger.Error("shell/exec unmarshal", "err", err)
33-								sesh.Fatal(err)
34-								return
35-							}
36+							if len(req.Payload) > 0 {
37+								var payload = struct{ Value string }{}
38+								err := ssh.Unmarshal(req.Payload, &payload)
39+								if err != nil {
40+									sc.Logger.Error("shell/exec unmarshal", "err", err)
41+									sesh.Fatal(err)
42+									return
43+								}
44 
45-							if sc.SSHServer.Config.PromListenAddr != "" {
46-								sc.SSHServer.SessionsCreated.WithLabelValues(payload.Value).Inc()
47-								defer func() {
48-									sc.SSHServer.SessionsFinished.WithLabelValues(payload.Value).Inc()
49-									sc.SSHServer.SessionsDuration.WithLabelValues(payload.Value).Add(time.Since(sc.Start).Seconds())
50-								}()
51-							}
52+								if sc.SSHServer.Config.PromListenAddr != "" {
53+									sc.SSHServer.SessionsCreated.WithLabelValues(payload.Value).Inc()
54+									defer func() {
55+										sc.SSHServer.SessionsFinished.WithLabelValues(payload.Value).Inc()
56+										sc.SSHServer.SessionsDuration.WithLabelValues(payload.Value).Add(time.Since(sc.Start).Seconds())
57+									}()
58+								}
59 
60-							sesh.SetValue("command", strings.Fields(payload.Value))
61+								sesh.SetValue("command", strings.Fields(payload.Value))
62+							}
63 
64 							h := func(*SSHServerConnSession) error { return nil }
65 							for _, m := range sc.SSHServer.Config.Middleware {
66@@ -590,11 +594,12 @@ type PubKeyAuthHandler func(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Perm
67 func NewSSHServerWithConfig(
68 	ctx context.Context,
69 	logger *slog.Logger,
70-	host, port, promPort string,
71+	app, host, port, promPort string,
72 	pubKeyAuthHandler PubKeyAuthHandler,
73 	middleware, subsystemMiddleware []SSHServerMiddleware,
74 	channelMiddleware map[string]SSHServerChannelMiddleware) (*SSHServer, error) {
75 	server := NewSSHServer(ctx, logger, &SSHServerConfig{
76+		App:        app,
77 		ListenAddr: fmt.Sprintf("%s:%s", host, port),
78 		ServerConfig: &ssh.ServerConfig{
79 			PublicKeyCallback: pubKeyAuthHandler,