Files
conduit/ssh/handler_tunnel.go
2025-10-10 10:05:28 +02:00

48 lines
1.3 KiB
Go

package ssh
import (
"context"
"errors"
"net"
"git.maze.io/maze/conduit/logger"
"golang.org/x/crypto/ssh"
)
type Dialer interface {
DialContext(ctx context.Context, network, address string) (net.Conn, error)
}
func ForwardTunnel(dialer Dialer) ChannelHandler {
if dialer == nil {
dialer = new(net.Dialer)
}
return ChannelHandlerFunc(func(ctx Context, channel ssh.Channel, requests <-chan *ssh.Request, _ []byte) error {
return errors.New("byez!")
})
}
type PortForwardRequestHandler interface {
HandlePortForwardRequest(ctx Context, raddr, laddr net.Addr) (net.Conn, error)
}
type PortForwardRequestHandlerFunc func(Context, net.Addr, net.Addr) (net.Conn, error)
func (f PortForwardRequestHandlerFunc) HandlePortForwardRequest(ctx Context, raddr, laddr net.Addr) (net.Conn, error) {
return f(ctx, raddr, laddr)
}
func PortForwardDialer(dialer Dialer) PortForwardRequestHandler {
if dialer == nil {
dialer = new(net.Dialer)
}
return PortForwardRequestHandlerFunc(func(ctx Context, raddr, laddr net.Addr) (net.Conn, error) {
log := ctx.(*sshContext).log.Values(logger.Values{
"laddr": laddr.String(),
"raddr": raddr.String(),
})
log.Debug("Dialing port forwarding request")
return dialer.DialContext(context.Background(), raddr.Network(), raddr.String())
})
}