package module
Version: v1.3.1 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Feb 5, 2021 License: MIT Imports: 6 Imported by: 0


🚇 sshtunnel

Ultra simple SSH tunnelling for Go programs.


go get -u

Or better with dep:

dep ensure -add


// Setup the tunnel, but do not yet start it yet.
tunnel := sshtunnel.NewSSHTunnel(
   // User and host of tunnel server, it will default to port 22
   // if not specified.

   // Pick ONE of the following authentication methods:
   sshtunnel.PrivateKeyFile("path/to/private/key.pem"), // 1. private key
   ssh.Password("password"),                            // 2. password

   // The destination host and port of the actual server.
   // The local port you want to bind the remote port to.
   // Specifying "0" will lead to a random port.

// You can provide a logger for debugging, or remove this line to
// make it silent.
tunnel.Log = log.New(os.Stdout, "", log.Ldate | log.Lmicroseconds)

// Start the server in the background. You will need to wait a
// small amount of time for it to bind to the localhost port
// before you can start sending connections.
go tunnel.Start()
time.Sleep(100 * time.Millisecond)

// NewSSHTunnel will bind to a random port so that you can have
// multiple SSH tunnels available. The port is available through:
//   tunnel.Local.Port

// You can use any normal Go code to connect to the destination server
// through localhost. You may need to use for some libraries.
// Here is an example of connecting to a PostgreSQL server:
conn := fmt.Sprintf("host= port=%d username=foo", tunnel.Local.Port)
db, err := sql.Open("postgres", conn)

// ...




This section is empty.


This section is empty.


func PrivateKeyFile

func PrivateKeyFile(file string, passphrase []byte) (ssh.AuthMethod, error)


type Endpoint

type Endpoint struct {
	Host string
	Port int
	User string

func NewEndpoint

func NewEndpoint(s string) *Endpoint

func (*Endpoint) String

func (endpoint *Endpoint) String() string

type SSHTunnel

type SSHTunnel struct {
	Local    *Endpoint
	Server   *Endpoint
	Remote   *Endpoint
	Config   *ssh.ClientConfig
	Log      logger
	Conns    []net.Conn
	SvrConns []*ssh.Client
	// contains filtered or unexported fields

func NewSSHTunnel

func NewSSHTunnel(tunnel string, auth ssh.AuthMethod, destination string, localport string) *SSHTunnel

NewSSHTunnel creates a new single-use tunnel. Supplying "0" for localport will use a random port.

func (*SSHTunnel) Close added in v1.3.0

func (tunnel *SSHTunnel) Close()

func (*SSHTunnel) Start

func (tunnel *SSHTunnel) Start() error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
t or T : Toggle theme light dark auto
y or Y : Canonical URL