proxy.go

· erock's pastes · raw

expires: 21 Aug, 2024

 1diff --git a/proxy.go b/proxy.go
 2new file mode 100644
 3index 0000000..b4adec5
 4--- /dev/null
 5+++ b/proxy.go
 6@@ -0,0 +1,40 @@
 7+package ptun
 8+
 9+import (
10+	"io"
11+	"net"
12+
13+	"github.com/charmbracelet/ssh"
14+	gossh "golang.org/x/crypto/ssh"
15+)
16+
17+type ProxyTunnelHandler struct {
18+	*WebTunnelHandler
19+}
20+
21+func (tun *ProxyTunnelHandler) Serve(listener net.Listener, ctx ssh.Context) error {
22+	rawConn, err := net.Dial("tcp", "pico.sh:22")
23+	if err != nil {
24+		return err
25+	}
26+
27+	sshConn, chans, reqs, err := gossh.NewClientConn(rawConn, "pico.sh", &gossh.ClientConfig{})
28+	if err != nil {
29+		return err
30+	}
31+
32+	sshClient := gossh.NewClient(sshConn, chans, reqs)
33+
34+	dbConn, err := sshClient.Dial("unix", "/var/run/port-forward/2c537858")
35+	if err != nil {
36+		return err
37+	}
38+
39+	listenConn, err := listener.Accept()
40+	if err != nil {
41+		return err
42+	}
43+
44+	_, err = io.Copy(dbConn, listenConn)
45+	return err
46+}