- 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
+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())
+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())
+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())
+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())
+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())
+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())
+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 )
+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,