parro-it / open-ssh-tunnel

Easy ssh2 tunneling
MIT License
53 stars 7 forks source link

open-ssh-tunnel

Greenkeeper badge

Easy ssh tunneling function based on ssh2 library

Inspired by tunnel-ssh, but with simplified, more modern code.

Travis Build Status NPM module NPM downloads

Installation

npm install --save open-ssh-tunnel

Usage

  const openSshTunnel = require('open-ssh-tunnel');
  async function openATunnel() {
    const server = await openSshTunnel({
      host: 'your.server.address.com',
      username: 'you',
      password: 'secret',
      srcPort: 3306,
      srcAddr: '127.0.0.1',
      dstPort: 3306,
      dstAddr: '127.0.0.1',
      readyTimeout: 1000,
      forwardTimeout: 1000,
      localPort: 3306,
      localAddr: '127.0.0.1'
    });

    // you can now connect to your
    // forwarded tcp port!

    // later, when you want to close the tunnel
    server.close();
  }

Example

╭───────────────╮      ╭─────────────────╮      ╭─────────╮      ╭─────────╮
│ Mongo         │      │ open-ssh-tunnel │      │ SSH     │      │ Mongo   │
│ client        │ <--> │                 │ <--> │ server  │ <--> │ server  │
│ 192.168.1.1   │      │ 192.168.1.2     │      │ 10.0.0.2│      │ 10.0.0.1│
│               │      │                 │      │         │      │         │
╰───────────────╯      ╰─────────────────╯      ╰─────────╯      ╰─────────╯

In scenario where you want to connect to mongo that runs on a remote host, you should provide the following configuration.

{
    destPort: 27017,
    destAddr: '10.0.0.1',
    host: '10.0.0.2',
    port: 22,
    localAddr: 27018,
    localPort: '192.168.1.2',
    srcAddr: '192.168.1.1',
    srcPort: 27019,
    ...
}

Note that you have to provide localAddr when you need to make the tunnel visible to other hosts in your LAN.

srcAddr and srcPort, when provided, should be the network address of a client host connecting to your SSH tunnel local endpoint. If you do not need them you can provide any value for the arguments.

API

The module exports openSshTunnel function. It return a promise that resolve to a node net server instance if tunnel is opened, otherwise is rejected with an error.

Options

Related

License

The MIT License (MIT)

Copyright (c) 2015 parro-it