分享几个基于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. SQL SERVER 中的*=和=*

    一.* =和= * 是在sql server2000中左连接,右连接的用法相当于left join 和right join,现在sql2005和2008默认是不支持的,可以设置兼容2000或2008 ...

  2. yum软件包管理器

    Yum (Yellow dog Updater, Modified) 黄狗升级器是一个在 Fedora 中的字符前端软件包管理器.基于 RPM 包管理(介绍见RPM包及其管理),能够从指定的服务器自动 ...

  3. AI-Info-Micron-Menu:Products

    ylbtech-AI-Info-Micron-Menu:Products 我们制造业界最广泛的存储器和存储技术产品组合:DRAM,NAND,NOR和3D XPoint™存储器. 凭借紧密的行业合作伙伴 ...

  4. iOS开发者福利之精品源码汇总!免费下载

    汇总一些看着不错的源码,有需要的朋友过来下载吧!{:4_102:} 1.用swift制作的色彩炫丽的进度条-KDCircularProgressKDCircularProgress是使用swift制作 ...

  5. 第三篇elasticsearch分布式安装

    elasticSearch 分布式安装 1.在elasticSearch下的config下elasticsearch.yml文件最后一行添加注意 一定要加空格在:后面cluster.name: wal ...

  6. sklearn解决过拟合的例子

    Learning curve 检视过拟合 sklearn.learning_curve 中的 learning curve 可以很直观的看出我们的 model 学习的进度, 对比发现有没有 overf ...

  7. fsck修复系统断电或非正常关机导致的系统磁盘问题

    问题描述: unexpected inconsistency; run fask mannally. (i.e., without -a or -p options) fsck repaire man ...

  8. 死磕 java同步系列之开篇

    简介 同步系列,这是彤哥想了好久的名字,本来是准备写锁相关的内容,但是java中的CountDownLatch.Semaphore.CyclicBarrier这些类又不属于锁,它们和锁又有很多共同点, ...

  9. Linux ubi子系统原理分析

    本文思维导图总纲: 综述 关于ubi子系统,早已有比较正式的介绍,也提供非常形象的介绍ubi子系统ppt 国内的前辈 alloysystem 不辞辛劳为我们提供了部分正式介绍的中文译文,以及找不到原文 ...

  10. 转发:php解决高并发

    php解决高并发(转发:https://www.cnblogs.com/walblog/articles/8476579.html) 我们通常衡量一个Web系统的吞吐率的指标是QPS(Query Pe ...