Initial import
This commit is contained in:
47
ssh/handler_tunnel.go
Normal file
47
ssh/handler_tunnel.go
Normal file
@@ -0,0 +1,47 @@
|
||||
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())
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user