SSH tunnels – in any way you want it
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
test
.babelrc
.editorconfig
.eslintrc.yml
.gitattributes
.gitignore
.npmignore
.travis.yml
LICENSE
index.js
package.json
readme.md

readme.md

Adit Build Status Coverage Status

Forward all your stuff through ssh tunnel.

There is a lot of examples out there how this could be useful, for example, check out "SSH Tunnel - Local and Remote Port Forwarding Explained With Examples"

Usage

ssh and Adit

$ ssh -L 9000:imgur.com:80 example.com
new Adit('9000:imgur.com:80 example.com'/*, password*/).forward().then(adit => {
  console.log('success');

  adit.close();
});

$ ssh -R 9000:localhost:3000 example.com

new Adit('9000:localhost:3000 example.com'/*, password*/).reverse().then(adit => {
  console.log('success');

  adit.close();
});

Listen for events

let server = new Adit(...);
server.on('ready', ...);
server.on('tcp connection', ...)
server.on('error', ...);
server.on('data', ...);

server.forward(...).then(...);

Thorough

import Adit from 'adit';

let adit = new Adit({
  
  host: `example.com`

  // Everything else is optional
  // username: 'tester' // By default, `USER` environment variable will be used

  // port: 22, // 22 By default
  // Or port range - 
  // port: [22, 23], the first available port of the three will be used

  // Also, see "Authentification strategy" below - 
  // "agent": "path",
  // "password": "pass",
  // "key": Buffer
});

// Or just
let adit = new Adit('example.com');

// `3` - is how many times we want to try to connect, before bailing out */
adit.open(3).then(connection => {
  // At this point we established connection with remote server

  // Forward all connections from **local** server to remote one
  connection.out({
    // from
    host: 'example.com'
    port: 80
  }, {
    // To
    host: 'localhost'
    port: 8080,
    // Or port range - 
    // port: [25, 28], the first available port of the three will be used
  }).then(() => {
    // Forwarding is enabled
  });

  // Forward all connections from **remote** server to local one
  connection.in({
    // from
    host: 'example.com'
    port: 80,
    // Or port range - 
    // port: [25, 28], the first available port of the three will be used
  }, {
    // To
    host: 'localhost'
    port: 8080
  }).then(() => {
    // Forwarding is enabled
  });
}, error => {
  console.error(error);
});

adit.on('error', () => {
  // Report error
});

// Then, after awhile you would want to close it
adit.close();

Authentification strategy

  • If password is defined - use it
  • If agent or key is defined explicitly - use one of them, prioritize the agent
  • If agent or key is not passed - use environment varibles (SSH_AUTH_SOCK for agent)

Note: if key is used, assume it is added without passphrase, otherwise you should use agent