[原创]Nodejs 远程执行linux shell
分享几个基于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的更多相关文章
- 批量远程执行linux服务器程序--基于paramiko(多线程版)
批量远程执行linux服务器程序--基于paramiko paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接 具体安装方法这里不写,网 ...
- 利用java实现可远程执行linux命令的小工具
在linux的脚本中,如果不对机器做其他的处理,不能实现在linux的机器上执行命令.为了解决这个问题,写了个小工具来解决这个问题. 后面的代码是利用java实现的可远程执行linux命令的小工具,代 ...
- [Python2.x] 利用commands模块执行Linux shell命令
用Python写运维脚本时,经常需要执行linux shell的命令,Python中的commands模块专门用于调用Linux shell命令,并返回状态和结果,下面是commands模块的3个主要 ...
- Pyhton 利用threading远程下发文件和远程执行linux系统命令
#!/usr/bin/env python # encoding: utf-8 #__author__ = 'cp' #__date__ = '21/07/16 上午 10:32' import th ...
- java远程执行linux服务器上的shell脚本
业务场景:需要从服务器A中新增的文件同步至本地服务器,服务器A中内存有限,需同步成功之后清除文件. Java调用远程shell脚本,需要和远程服务器建立ssh链接,再调用指定的shell脚本. 1.创 ...
- C#远程执行Linux系统中Shell命令和SFTP上传文件
一.工具:SSH.Net 网址:https://github.com/sshnet/SSH.NET 二.调用命令代码: Renci.SshNet.SshClient ssh = "); ss ...
- 大技霸教你远程执行Linux脚本和命令
如果现在需要在 Linux 服务器上执行一系列命令(比如搭建 LNMP 环境)我应该会第一时间想到想办法写个 Shell 脚本,然后扔上去执行以下看看结果. 然而一贯懒惰的我并不想这么去执行 Shel ...
- 在docker中执行linux shell命令
在docker中执行shell命令,需要在命令前增加sh -c,例如: docker run ubuntu sh -c 'cat /data/a.txt > b.txt' 否则,指令无法被正常解 ...
- Java利用 ganymed-ssh2-build.jar来上传文件到linux以及下载linux文件以及执行linux shell命令
package api; import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.IOExcepti ...
随机推荐
- poj3414Pots(倒水BFS)
Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13231 Accepted: 5553 Special J ...
- java基础知识学习 java异常
1: Unchecked Exception( 也就是运行时异常) VS Check Exception(非运行时异常) 2: 运行期异常 VS 非运行期异常? 非运行时异常: 必须在代码中显示 ...
- JBOSS AS 5.X/6.X 反序列化漏洞(CVE-2017-12149)复现
本机IP:192.168.220.145 靶机IP:192.168.220.139,版本为JBOSS AS 6.1.0 Final 首先访问目标地址,http://192.168.220.139:80 ...
- 使用jquery扩展表格行合并方法探究
1.前言 最近项目中用到一个表格中对于相同内容的数据进行行合并的需求,本来想从网上找个现成的,省的自己再造轮子.于是就开始谷歌了...不过在搜索的过程中,发现找到的工具类很多都有一个前提,就是该表格中 ...
- javaIO 流分析总结
Java中的流,可以从不同的角度进行分类. 按照数据流的方向不同可以分为:输入流和输出流. 按照处理数据单位不同可以分为:字节流和字符流. 按照实现功能不同可以分为:节点流和处理流. 输出流: 输入流 ...
- 机器学习前沿热点——Deep Learning
深度学习是机器学习研究中的一个新的领域,其动机在于建立.模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像.声音和文本.深度学习是无监督学习的一种. 深度学习的概念源于人工神经网络的 ...
- shell 自动删除n天前备份
Linux自动删除n天前备份Linux是一个很能自动产生文件的系统,日志.邮件.备份等.因此需要设置让系统定时清理一些不需要的文件.语句写法: find 对应目录 -mtime +天数 -na ...
- 积累遇到过的linux终端操作指令
mkdir mkdir命令是常用的命令,用来建立空目录,它还有2个常用参数: -m, --mode=模式 设定权限<模式> (类似 chmod) -p, --parents 需要时创建上层 ...
- CodeForces 492D Vanya and Computer Game (思维题)
D. Vanya and Computer Game time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- [MySQL] Data too long for column 'title' at row 1
李刚轻量级JavaEE第六章的坑..艹李刚自己有没试过这些代码的啊,6.4这一份HqlQuery.java里需要的表,根本就跟他提供的sql脚本对不上啊..坑爹啊,而且字符编码集也有问题. 出现这个原 ...