分享几个基于nodejs远程执行linux shell的函数

参数说明:
  ips - 一个存有IP地址的数组对象

/**
* Created by kevalin on 2015/4/27.
*/
var async = require('async');
var SSH2Utils = require('ssh2-utils');
var fs = require('fs');
var ssh = new SSH2Utils(); /*
exec linux shell on remote-servers
----------------------------------------------------------------------------------------------
*/
exports.cmdShell2 = function(cmd, ips, callback) {
if(!cmd || !ips || !ips.length) {
console.log('cmdShell2 ERR - 缺少参数')
}
else {
var results = [];
async.waterfall([
function(cb1) {
var servers = [];
for(var i = 0; i < ips.length; i++) {
var _server = {};
_server['host'] = ips[i];
_server['username'] = 'root';
_server['privateKey'] = fs.readFileSync('/home/kevalin/.ssh/id_rsa');
servers.push(_server)
}
cb1(null, servers)
},
function(servers, cb1) {
async.each(servers, function(server, cb2) {
var _result = {};
ssh.exec(server, cmd, function(err, stdout, stderr, server, conn) {
if (err) throw err;
_result['ip'] = server.host;
_result['cmdResult'] = stdout.replace('\n\n', '').replace('\n', '');
results.push(_result);
conn.end()
cb2()
})
}, function(err) {
cb1(err, results)
})
}
], function(err, result) {
if (err) throw err;
callback(result)
})
}
} /*
get file from remote-servers function
----------------------------------------------------------------------------------------------
*/
exports.getFiles = function(ips, filename, remotePath, localPath, callback) {
if (!ips || !filename || !remotePath || !localPath) {
console.log('getFile ERR - 缺少参数')
}
else {
async.waterfall([
function(cb1) {
var servers = [];
for(var i = 0; i < ips.length; i++) {
var _server = {};
_server['host'] = ips[i];
_server['username'] = 'root';
_server['privateKey'] = fs.readFileSync('/home/kevalin/.ssh/id_rsa');
servers.push(_server)
}
cb1(null, servers)
},
function(servers, cb1) {
async.each(servers, function (server, cb2) {
async.series([
function(cb3) {
var localServer = { host:'localhost', username:'kevalin', password:'123456' };
var _localPath = localPath + server.host;
ssh.mkdir(localServer, _localPath, function(err, server, conn) {
if (err) {
console.log(err)
}
conn.end();
cb3(null, 'one')
})
},
function(cb3) {
var _remoteFile = remotePath + filename;
var _localFile = localPath + server.host + '/' + filename;
ssh.getFile(server, _remoteFile, _localFile, function(err, server, conn) {
if (err) {
console.log(err)
}
conn.end();
cb3(null, 'two')
})
}
], function(err, c) {
cb2()
})
}, function(err) {
cb1()
})
}
], function(err, result) {
callback('get file success!!!')
})
}
} /*
put file to remote-servers function
----------------------------------------------------------------------------------------------
*/
exports.putFiles = function(ips, filename, localPath, remotePath, callback) {
if (!ips || !filename || !remotePath || !localPath) {
console.log('putFiles ERR - 缺少参数')
}
else {
async.waterfall([
function(cb1) {
var servers = [];
for(var i = 0; i < ips.length; i++) {
var _server = {};
_server['host'] = ips[i];
_server['username'] = 'root';
_server['privateKey'] = fs.readFileSync('/home/kevalin/.ssh/id_rsa');
servers.push(_server)
}
cb1(null, servers)
},
function(servers, cb1) {
async.each(servers, function(server, cb2) {
var _localFile = localPath + filename;
var _remoteFile = remotePath + filename;
ssh.putFile(server, _localFile, _remoteFile, function(err, server, conn) {
if (err) {
console.log(err)
}
conn.end();
cb2()
})
}, function(err) {
cb1()
})
}
], function(err, result) {
callback('put file success!!!')
})
}
}

[原创]Nodejs 远程执行linux shell的更多相关文章

  1. 批量远程执行linux服务器程序--基于paramiko(多线程版)

    批量远程执行linux服务器程序--基于paramiko paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接 具体安装方法这里不写,网 ...

  2. 利用java实现可远程执行linux命令的小工具

    在linux的脚本中,如果不对机器做其他的处理,不能实现在linux的机器上执行命令.为了解决这个问题,写了个小工具来解决这个问题. 后面的代码是利用java实现的可远程执行linux命令的小工具,代 ...

  3. [Python2.x] 利用commands模块执行Linux shell命令

    用Python写运维脚本时,经常需要执行linux shell的命令,Python中的commands模块专门用于调用Linux shell命令,并返回状态和结果,下面是commands模块的3个主要 ...

  4. Pyhton 利用threading远程下发文件和远程执行linux系统命令

    #!/usr/bin/env python # encoding: utf-8 #__author__ = 'cp' #__date__ = '21/07/16 上午 10:32' import th ...

  5. java远程执行linux服务器上的shell脚本

    业务场景:需要从服务器A中新增的文件同步至本地服务器,服务器A中内存有限,需同步成功之后清除文件. Java调用远程shell脚本,需要和远程服务器建立ssh链接,再调用指定的shell脚本. 1.创 ...

  6. C#远程执行Linux系统中Shell命令和SFTP上传文件

    一.工具:SSH.Net 网址:https://github.com/sshnet/SSH.NET 二.调用命令代码: Renci.SshNet.SshClient ssh = "); ss ...

  7. 大技霸教你远程执行Linux脚本和命令

    如果现在需要在 Linux 服务器上执行一系列命令(比如搭建 LNMP 环境)我应该会第一时间想到想办法写个 Shell 脚本,然后扔上去执行以下看看结果. 然而一贯懒惰的我并不想这么去执行 Shel ...

  8. 在docker中执行linux shell命令

    在docker中执行shell命令,需要在命令前增加sh -c,例如: docker run ubuntu sh -c 'cat /data/a.txt > b.txt' 否则,指令无法被正常解 ...

  9. Java利用 ganymed-ssh2-build.jar来上传文件到linux以及下载linux文件以及执行linux shell命令

    package api; import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.IOExcepti ...

随机推荐

  1. web攻击之八:溢出攻击(nginx服务器防sql注入/溢出攻击/spam及禁User-agents)

    一.什么是溢出攻击 首先, 溢出,通俗的讲就是意外数据的重新写入,就像装满了水的水桶,继续装水就会溢出,而溢出攻击就是,攻击者可以控制溢出的代码,如果程序的对象是内核级别的,如dll.sys文件等,就 ...

  2. cocos2d-x 屏幕分辨率适配方法

    转自:http://blog.csdn.net/somestill/article/details/9950403 bool AppDelegate::applicationDidFinishLaun ...

  3. 1 ELK 简介

    日志主要包括系统日志.应用程序日志和安全日志,系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠 ...

  4. Uboot启动参数说明

    bootcmd=cp.b 0xc4200000 0x7fc0 0x200000 ; bootm // 倒计时到 0 以后,自动执行的指令 bootdelay=2 baudrate=38400 // 串 ...

  5. 利用java mail发送邮件

    import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import java ...

  6. 8、SRR数据下载https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/2.8.2/

    1.prefetch SRRxxxxxx         -/ncbi/public/sra 2.fastq-dump --split-files xxxxxxsra 3.SRA.SAM以及Fastq ...

  7. p1516&poj1061&bzoj1477 青蛙的约会

    传送门(洛谷) 题目 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情 ...

  8. idea中java项目增加module后,手动增加xml文件,合并到webapp/WEB-INFO或WEB-INFO(包)

    当手工增加一个module,增加配置文件(如:web.xml)需要合并到文件夹里,要不众多文件在一个src文件夹下,太凌乱. 1. 合并到webapp/WEB-INFO下 a. 首先增加webapp目 ...

  9. 20169219linux 内核原理与分析第四周作业

    系统调用 系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核唯一的合法入口. 一般情况下,应用程序通过在用户空间实现的应用编程接口(API)而不是直接通过系统调用来编程. 要访问系统调用 ...

  10. matlab 矩阵运算技巧

    1.a=a(:) 作用:将矩阵转化成列向量 a=[a11 a12 a13                      a=[a11 a21 a12 a22 a13 a23]^T a21 a22 a23] ...