This repository has moved to Shipit main repository
Run remote commands over a pool of server using SSH.
npm install ssh-pool
varsshPool=require('ssh-pool');varpool=newsshPool.ConnectionPool(['user@server1','user@server2']);pool.run('hostname').then(function(results){console.log(results[0].stdout);// 'server1'console.log(results[1].stdout);// 'server2'});Create a new connection to run command on a remote server.
Arguments:
@param {object} options Options
@param {string|object} options.remote Remote
@param {Stream} [options.stdout] Stdout stream
@param {Stream} [options.stderr] Stderr stream
@param {string} [options.key] SSH key
@param {function} [options.log] Log method
The remote can use the shorthand syntax or an object:
// Default user will be deploy and ssh default port.newConnection({remote: 'localhost'});// Default ssh port will be used.newConnection({remote: 'user@localhost'});// Custom user and custom port.newConnection({remote: 'user@localhost:22'});// Object syntax.newConnection({remote: {user: 'user',host: 'localhost',port: 22}});The log method is used to log output directly:
varconnection=newConnection({remote: 'localhost',log: console.log.bind(console)});connection.run('pwd');// Will output:// Running "pwd" on host "localhost".// @localhost /my/directoryRun a command on the remote server, you can specify custom childProcess.exec options. A callback or a promise can be used.
Arguments:
@param {string} command Command
@param {object} [options] Exec options
@param {function} [cb] Callback
@returns {Promise}
connection.run('ls',{env: {NODE_ENV: 'test'}}).then(function(result){result.stdout;// stdout outputresult.stderr;// stderr outputresult.child;// child object});Copy a file or a directory to a remote server, you can specify custom childProcess.exec options. A callback or a promise can be used.
Arguments:
@param {string} src Source
@param {string} dest Destination
@param {object} [options] Exec Options
@param {function} [cb] Callback
@returns {Promise}
connection.copy('./localfile','/remote-file',{env: {NODE_ENV: 'test'}}).then(function(result){result.stdout;// stdout outputresult.stderr;// stderr outputresult.child;// child object});Create a new pool of connections and custom options for all connections.
If you use the short syntax, connections will be automatically created, else you can use previous created connections.
// Use shorthand.varpool=newConnectionPool(['server1','server2']);// Use previously created connections.varconnection1=newConnection({remote: 'server1'});varconnection2=newConnection({remote: 'server2'});varpool=newConnectionPool([connection1,connection2]);Same as connection.run, except that the command is executed in parallel on each server of the pool.
Arguments:
@param {string} command Command
@param {object} [options] Options
@param {function} [cb] Callback
@returns {Promise}
pool.run('hostname').then(function(results){// ...});Same as connection.copy, except that the copy is done in parallel on each server of the pool.
Options:
@param {object} [options.direction] Direction of copy
Also all exec options are supported.
Arguments:
@param {string} src Source
@param {string} dest Destination
@param {object} options Options
@param {function} [cb] Callback
@returns {Promise}
pool.copy('./localfile','/remote-file').then(function(results){// ...});MIT