48 lines
1.3 KiB
Go
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())
|
|
})
|
|
}
|