Skip to content

Commit a7d028d

Browse files
committed
Remove charm
1 parent decf68d commit a7d028d

File tree

9 files changed

+180
-309
lines changed

9 files changed

+180
-309
lines changed

README.md

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# tunkit - ssh tunnel tooling
22

33
- Passwordless authentication for the browser using SSH local forwarding.
4-
- Implemented as [wish](https://github.com/charmbracelet/wish) middleware.
54

65
# Passwordless authentication
76

cmd/docker/main.go

+45-52
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,18 @@ package main
22

33
import (
44
"bytes"
5-
"context"
65
"encoding/json"
76
"fmt"
87
"io"
98
"log"
10-
"log/slog"
119
"net/http"
1210
"net/http/httputil"
1311
"net/url"
1412
"os"
15-
"os/signal"
1613
"strconv"
1714
"strings"
18-
"syscall"
19-
"time"
2015

21-
"github.com/charmbracelet/ssh"
22-
"github.com/charmbracelet/wish"
23-
"github.com/picosh/tunkit"
16+
"github.com/picosh/pico/pssh"
2417
)
2518

2619
type ErrorHandler struct {
@@ -32,7 +25,7 @@ func (e *ErrorHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
3225
http.Error(w, e.Err.Error(), http.StatusInternalServerError)
3326
}
3427

35-
func serveMux(ctx ssh.Context) http.Handler {
28+
func serveMux(ctx *pssh.SSHServerConnSession) http.Handler {
3629
router := http.NewServeMux()
3730
slug := ctx.User()
3831

@@ -180,47 +173,47 @@ func serveMux(ctx ssh.Context) http.Handler {
180173
}
181174

182175
func main() {
183-
host := os.Getenv("SSH_HOST")
184-
if host == "" {
185-
host = "0.0.0.0"
186-
}
187-
port := os.Getenv("SSH_PORT")
188-
if port == "" {
189-
port = "2222"
190-
}
191-
keyPath := os.Getenv("SSH_AUTHORIZED_KEYS")
192-
if keyPath == "" {
193-
keyPath = "ssh_data/authorized_keys"
194-
}
195-
logger := slog.Default()
196-
197-
s, err := wish.NewServer(
198-
wish.WithAddress(fmt.Sprintf("%s:%s", host, port)),
199-
wish.WithHostKeyPath("ssh_data/term_info_ed25519"),
200-
wish.WithAuthorizedKeys(keyPath),
201-
tunkit.WithWebTunnel(tunkit.NewWebTunnelHandler(serveMux, logger)),
202-
)
203-
204-
if err != nil {
205-
logger.Error("could not create server", "err", err)
206-
}
207-
208-
done := make(chan os.Signal, 1)
209-
signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
210-
logger.Info("starting SSH server", "host", host, "port", port)
211-
go func() {
212-
if err = s.ListenAndServe(); err != nil {
213-
logger.Error("serve error", "err", err)
214-
os.Exit(1)
215-
}
216-
}()
217-
218-
<-done
219-
logger.Info("stopping SSH server")
220-
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
221-
defer func() { cancel() }()
222-
if err := s.Shutdown(ctx); err != nil {
223-
logger.Error("shutdown", "err", err)
224-
os.Exit(1)
225-
}
176+
// host := os.Getenv("SSH_HOST")
177+
// if host == "" {
178+
// host = "0.0.0.0"
179+
// }
180+
// port := os.Getenv("SSH_PORT")
181+
// if port == "" {
182+
// port = "2222"
183+
// }
184+
// keyPath := os.Getenv("SSH_AUTHORIZED_KEYS")
185+
// if keyPath == "" {
186+
// keyPath = "ssh_data/authorized_keys"
187+
// }
188+
// logger := slog.Default()
189+
190+
// s, err := wish.NewServer(
191+
// wish.WithAddress(fmt.Sprintf("%s:%s", host, port)),
192+
// wish.WithHostKeyPath("ssh_data/term_info_ed25519"),
193+
// wish.WithAuthorizedKeys(keyPath),
194+
// tunkit.WithWebTunnel(tunkit.NewWebTunnelHandler(serveMux, logger)),
195+
// )
196+
197+
// if err != nil {
198+
// logger.Error("could not create server", "err", err)
199+
// }
200+
201+
// done := make(chan os.Signal, 1)
202+
// signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
203+
// logger.Info("starting SSH server", "host", host, "port", port)
204+
// go func() {
205+
// if err = s.ListenAndServe(); err != nil {
206+
// logger.Error("serve error", "err", err)
207+
// os.Exit(1)
208+
// }
209+
// }()
210+
211+
// <-done
212+
// logger.Info("stopping SSH server")
213+
// ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
214+
// defer func() { cancel() }()
215+
// if err := s.Shutdown(ctx); err != nil {
216+
// logger.Error("shutdown", "err", err)
217+
// os.Exit(1)
218+
// }
226219
}

cmd/example/main.go

+44-52
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,29 @@
11
package main
22

33
import (
4-
"context"
54
"fmt"
6-
"log/slog"
75
"net/http"
8-
"os"
9-
"os/signal"
10-
"syscall"
11-
"time"
126

13-
"github.com/charmbracelet/ssh"
14-
"github.com/charmbracelet/wish"
15-
"github.com/picosh/tunkit"
16-
gossh "golang.org/x/crypto/ssh"
7+
"github.com/picosh/pico/pssh"
8+
"golang.org/x/crypto/ssh"
179
)
1810

19-
func getPubkey(ctx ssh.Context) (ssh.PublicKey, error) {
20-
pubkey, ok := ctx.Value(ssh.ContextKeyPublicKey).(ssh.PublicKey)
21-
if pubkey == nil || !ok {
22-
return pubkey, fmt.Errorf("pubkey not set on `ssh.Context()` for connection")
11+
func getPubkey(ctx *pssh.SSHServerConnSession) (ssh.PublicKey, error) {
12+
pubkey := ctx.PublicKey()
13+
if pubkey == nil {
14+
return pubkey, fmt.Errorf("pubkey not set on `*pssh.SSHServerConnSession()` for connection")
2315
}
2416
return pubkey, nil
2517
}
2618
func keyForSha256(pk ssh.PublicKey) string {
27-
return gossh.FingerprintSHA256(pk)
19+
return ssh.FingerprintSHA256(pk)
2820
}
2921

30-
func authHandler(ctx ssh.Context, key ssh.PublicKey) bool {
22+
func authHandler(ctx *pssh.SSHServerConnSession, key ssh.PublicKey) bool {
3123
return true
3224
}
3325

34-
func serveMux(ctx ssh.Context) http.Handler {
26+
func serveMux(ctx *pssh.SSHServerConnSession) http.Handler {
3527
clientName := ctx.User()
3628
pubkey, err := getPubkey(ctx)
3729
if err != nil {
@@ -51,43 +43,43 @@ func serveMux(ctx ssh.Context) http.Handler {
5143
}
5244

5345
func main() {
54-
host := os.Getenv("SSH_HOST")
55-
if host == "" {
56-
host = "0.0.0.0"
57-
}
58-
port := os.Getenv("SSH_PORT")
59-
if port == "" {
60-
port = "2222"
61-
}
46+
// host := os.Getenv("SSH_HOST")
47+
// if host == "" {
48+
// host = "0.0.0.0"
49+
// }
50+
// port := os.Getenv("SSH_PORT")
51+
// if port == "" {
52+
// port = "2222"
53+
// }
6254

63-
logger := slog.Default()
64-
s, err := wish.NewServer(
65-
wish.WithAddress(fmt.Sprintf("%s:%s", host, port)),
66-
wish.WithHostKeyPath("ssh_data/term_info_ed25519"),
67-
wish.WithPublicKeyAuth(authHandler),
68-
tunkit.WithWebTunnel(tunkit.NewWebTunnelHandler(serveMux, logger)),
69-
)
55+
// logger := slog.Default()
56+
// s, err := wish.NewServer(
57+
// wish.WithAddress(fmt.Sprintf("%s:%s", host, port)),
58+
// wish.WithHostKeyPath("ssh_data/term_info_ed25519"),
59+
// wish.WithPublicKeyAuth(authHandler),
60+
// tunkit.WithWebTunnel(tunkit.NewWebTunnelHandler(serveMux, logger)),
61+
// )
7062

71-
if err != nil {
72-
logger.Error("could not create server", "err", err)
73-
}
63+
// if err != nil {
64+
// logger.Error("could not create server", "err", err)
65+
// }
7466

75-
done := make(chan os.Signal, 1)
76-
signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
77-
logger.Info("starting SSH server", "host", host, "port", port)
78-
go func() {
79-
if err = s.ListenAndServe(); err != nil {
80-
logger.Error("serve error", "err", err)
81-
os.Exit(1)
82-
}
83-
}()
67+
// done := make(chan os.Signal, 1)
68+
// signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
69+
// logger.Info("starting SSH server", "host", host, "port", port)
70+
// go func() {
71+
// if err = s.ListenAndServe(); err != nil {
72+
// logger.Error("serve error", "err", err)
73+
// os.Exit(1)
74+
// }
75+
// }()
8476

85-
<-done
86-
logger.Info("stopping SSH server")
87-
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
88-
defer func() { cancel() }()
89-
if err := s.Shutdown(ctx); err != nil {
90-
logger.Error("shutdown", "err", err)
91-
os.Exit(1)
92-
}
77+
// <-done
78+
// logger.Info("stopping SSH server")
79+
// ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
80+
// defer func() { cancel() }()
81+
// if err := s.Shutdown(ctx); err != nil {
82+
// logger.Error("shutdown", "err", err)
83+
// os.Exit(1)
84+
// }
9385
}

cmd/sshForward/main.go

+48-54
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
11
package main
22

33
import (
4-
"context"
5-
"fmt"
64
"io"
75
"log/slog"
86
"net"
97
"os"
10-
"os/signal"
11-
"syscall"
12-
"time"
138

14-
"github.com/charmbracelet/ssh"
15-
"github.com/charmbracelet/wish"
9+
"github.com/picosh/pico/pssh"
1610
"github.com/picosh/tunkit"
1711
gossh "golang.org/x/crypto/ssh"
1812
)
@@ -21,7 +15,7 @@ type handler struct {
2115
logger *slog.Logger
2216
}
2317

24-
func (h *handler) CreateConn(ctx ssh.Context) (net.Conn, error) {
18+
func (h *handler) CreateConn(ctx *pssh.SSHServerConnSession) (net.Conn, error) {
2519
rawConn, err := net.Dial("tcp", os.Getenv("REMOTE_HOST"))
2620
if err != nil {
2721
return nil, err
@@ -66,56 +60,56 @@ func (h *handler) GetLogger() *slog.Logger {
6660
return h.logger
6761
}
6862

69-
func (h *handler) Close(ctx ssh.Context) error {
63+
func (h *handler) Close(ctx *pssh.SSHServerConnSession) error {
7064
return nil
7165
}
7266

7367
var _ tunkit.Tunnel = &handler{}
7468

7569
func main() {
76-
host := os.Getenv("SSH_HOST")
77-
if host == "" {
78-
host = "0.0.0.0"
79-
}
80-
port := os.Getenv("SSH_PORT")
81-
if port == "" {
82-
port = "2222"
83-
}
84-
keyPath := os.Getenv("SSH_AUTHORIZED_KEYS")
85-
if keyPath == "" {
86-
keyPath = "ssh_data/authorized_keys"
87-
}
88-
logger := slog.Default()
89-
90-
s, err := wish.NewServer(
91-
wish.WithAddress(fmt.Sprintf("%s:%s", host, port)),
92-
wish.WithHostKeyPath("ssh_data/term_info_ed25519"),
93-
wish.WithAuthorizedKeys(keyPath),
94-
tunkit.WithTunnel(&handler{
95-
logger: logger,
96-
}),
97-
)
98-
99-
if err != nil {
100-
logger.Error("could not create server", "err", err)
101-
}
102-
103-
done := make(chan os.Signal, 1)
104-
signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
105-
logger.Info("starting SSH server", "host", host, "port", port)
106-
go func() {
107-
if err = s.ListenAndServe(); err != nil {
108-
logger.Error("serve error", "err", err)
109-
os.Exit(1)
110-
}
111-
}()
112-
113-
<-done
114-
logger.Info("stopping SSH server")
115-
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
116-
defer func() { cancel() }()
117-
if err := s.Shutdown(ctx); err != nil {
118-
logger.Error("shutdown", "err", err)
119-
os.Exit(1)
120-
}
70+
// host := os.Getenv("SSH_HOST")
71+
// if host == "" {
72+
// host = "0.0.0.0"
73+
// }
74+
// port := os.Getenv("SSH_PORT")
75+
// if port == "" {
76+
// port = "2222"
77+
// }
78+
// keyPath := os.Getenv("SSH_AUTHORIZED_KEYS")
79+
// if keyPath == "" {
80+
// keyPath = "ssh_data/authorized_keys"
81+
// }
82+
// logger := slog.Default()
83+
84+
// s, err := wish.NewServer(
85+
// wish.WithAddress(fmt.Sprintf("%s:%s", host, port)),
86+
// wish.WithHostKeyPath("ssh_data/term_info_ed25519"),
87+
// wish.WithAuthorizedKeys(keyPath),
88+
// tunkit.WithTunnel(&handler{
89+
// logger: logger,
90+
// }),
91+
// )
92+
93+
// if err != nil {
94+
// logger.Error("could not create server", "err", err)
95+
// }
96+
97+
// done := make(chan os.Signal, 1)
98+
// signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
99+
// logger.Info("starting SSH server", "host", host, "port", port)
100+
// go func() {
101+
// if err = s.ListenAndServe(); err != nil {
102+
// logger.Error("serve error", "err", err)
103+
// os.Exit(1)
104+
// }
105+
// }()
106+
107+
// <-done
108+
// logger.Info("stopping SSH server")
109+
// ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
110+
// defer func() { cancel() }()
111+
// if err := s.Shutdown(ctx); err != nil {
112+
// logger.Error("shutdown", "err", err)
113+
// os.Exit(1)
114+
// }
121115
}

0 commit comments

Comments
 (0)