分享几个基于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. 【转】 Pro Android学习笔记(六十):Preferences(4):MultiSelect List Preference

    目录(?)[-] XML文件 在设备中保存 读出信息 ListPreference提供单选列表,我们可以通过CheckBoxPreference提供多选列表.此外,Android在3.0后提供Mult ...

  2. 【转】Pro Android学习笔记(十一):了解Intent(中)

    Intent的构成 Intent可以带有action,data(由URI表达),extra data(key/value map,键值对),指定的类名(成为component name).一个inte ...

  3. JavaScript跳转和打开新窗口

    跳转: window.location.href = "www.baidu.com"  // 跳转到百度首页,不打开新的浏览器窗口 等价于html中的<a href=&quo ...

  4. sql 查看表结构

    sqlserver 查看表结构 exec sp_help @TableName --得到表信息.字段,索引.constraint. exec sp_pkeys @TableName --得到主键. e ...

  5. mysql错误代号大全

    B.1. 服务器错误代码和消息 服务器错误信息来自下述源文件: · 错误消息信息列在share/errmsg.txt文件中."%d"和"%s"分别代表编号和字符 ...

  6. ResultSetMetaData和ResultSet

    我现在有一张表t_product;我们查询所有的商品:SELECT * FROM t_product; 上述所有的数据都可以封装成一个对象,我们称这个查询出来的对象为结果集对象:ResultSet. ...

  7. WSDL入门

    WSDL: 网络服务描述语言, 是Web Service的描述语言,它全名:Web Services Description Language,是一门基于 XML 的语言,用于描述 Web Servi ...

  8. 阶段3-团队合作\项目-网络安全传输系统\sprint3-账号管理子系统设计\第2课-账号管理子系统设计

    账号管理子系统的设计 客户端需要登录到服务器,在服务器去查询数据库,进行验证该用户. 打开client.c文件 编译之 把它复制到开发板里面去 这个程序是在本地数据库测试的!!!!!!!!!!!!!! ...

  9. adb devices unauthorized解决方法

    有时候使用adb连接手机时,即使打开了usb调试,手机添加了信任,仍然出现unauthorized的提示 解决办法如下: 先上两张stack overflow上面的图片: 很多人可能看不懂.翻一下大概 ...

  10. <base target="_self"/>标签的用法

    语法 <base target="value"> 属性值 值 描述 _blank 在新窗口中打开被链接文档. _self 默认.在相同的框架中打开被链接文档. _par ...