[原创]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 ...
随机推荐
- POJ(2186)强连通分量分解
#include<cstdio> #include<vector> #include<cstring> using namespace std; ; vector& ...
- JVM体系结构之六:堆Heap之2:新生代及新生代里的两个Survivor区(下一轮S0与S1交换角色,如此循环往复)、常见调优参数
一.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...
- oracle--pl/sql变量定义----
一.变量介绍 在编写pl/sql程序时,可以定义变量和常量:在pl/sql程序中包括有: 1).标量类型(scalar) 2).复合类型(composite) --用于操作单条记录 3).参照类型(r ...
- JavaScript中设置cookie的值
cookie 与 session 是网页开发中常用的信息存储方式.Cookie是在客户端开辟的一块可存储用户信息的地方:Session是在服务器内存中开辟的一块存储用户信息的地方.JavaScript ...
- hbase java API跟新数据,创建表
package hbaseCURD; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import o ...
- Learning Python 008 正则表达式-002 findall()方法
Python 正则表达式 - findall()方法 重点 findall()方法的使用 - 程序讲解 简单的符号的使用 正则表达式的库文件是re,先导入库文件: import re .的使用举例 # ...
- 菜鸟大充电啦啦啦啦啦:eclipse SDK 是什么啊
为什么下载是,没有单独的ecipse呢,,总是eclipse-sdk呢 而且还很大几百兆 回复1: Eclipse有好多专用名称,例如Eclipse SDK等.先说一下SDK, Eclipse Pro ...
- kinect2跑高博的orbslam2的过程(仅供自己参考记录)
首先感谢高博的无私奉献!http://www.cnblogs.com/gaoxiang12/p/5161223.html 程序所在的目录为:/home/zty/catkin_ws/src/iai_ki ...
- c# 指针unsafe/fixed -- 【一】
指针C#unsafefixed 目录(?)[-] 概述 unsafe fixed 1.1 概述 unsafe关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的.可以在属性.方法.类的声明中使 ...
- HDU 3400 Line belt (三分嵌套)
题目链接 Line belt Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...