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

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

  1. /**
  2. * Created by kevalin on 2015/4/27.
  3. */
  4. var async = require('async');
  5. var SSH2Utils = require('ssh2-utils');
  6. var fs = require('fs');
  7. var ssh = new SSH2Utils();
  8.  
  9. /*
  10. exec linux shell on remote-servers
  11. ----------------------------------------------------------------------------------------------
  12. */
  13. exports.cmdShell2 = function(cmd, ips, callback) {
  14. if(!cmd || !ips || !ips.length) {
  15. console.log('cmdShell2 ERR - 缺少参数')
  16. }
  17. else {
  18. var results = [];
  19. async.waterfall([
  20. function(cb1) {
  21. var servers = [];
  22. for(var i = 0; i < ips.length; i++) {
  23. var _server = {};
  24. _server['host'] = ips[i];
  25. _server['username'] = 'root';
  26. _server['privateKey'] = fs.readFileSync('/home/kevalin/.ssh/id_rsa');
  27. servers.push(_server)
  28. }
  29. cb1(null, servers)
  30. },
  31. function(servers, cb1) {
  32. async.each(servers, function(server, cb2) {
  33. var _result = {};
  34. ssh.exec(server, cmd, function(err, stdout, stderr, server, conn) {
  35. if (err) throw err;
  36. _result['ip'] = server.host;
  37. _result['cmdResult'] = stdout.replace('\n\n', '').replace('\n', '');
  38. results.push(_result);
  39. conn.end()
  40. cb2()
  41. })
  42. }, function(err) {
  43. cb1(err, results)
  44. })
  45. }
  46. ], function(err, result) {
  47. if (err) throw err;
  48. callback(result)
  49. })
  50. }
  51. }
  52.  
  53. /*
  54. get file from remote-servers function
  55. ----------------------------------------------------------------------------------------------
  56. */
  57. exports.getFiles = function(ips, filename, remotePath, localPath, callback) {
  58. if (!ips || !filename || !remotePath || !localPath) {
  59. console.log('getFile ERR - 缺少参数')
  60. }
  61. else {
  62. async.waterfall([
  63. function(cb1) {
  64. var servers = [];
  65. for(var i = 0; i < ips.length; i++) {
  66. var _server = {};
  67. _server['host'] = ips[i];
  68. _server['username'] = 'root';
  69. _server['privateKey'] = fs.readFileSync('/home/kevalin/.ssh/id_rsa');
  70. servers.push(_server)
  71. }
  72. cb1(null, servers)
  73. },
  74. function(servers, cb1) {
  75. async.each(servers, function (server, cb2) {
  76. async.series([
  77. function(cb3) {
  78. var localServer = { host:'localhost', username:'kevalin', password:'123456' };
  79. var _localPath = localPath + server.host;
  80. ssh.mkdir(localServer, _localPath, function(err, server, conn) {
  81. if (err) {
  82. console.log(err)
  83. }
  84. conn.end();
  85. cb3(null, 'one')
  86. })
  87. },
  88. function(cb3) {
  89. var _remoteFile = remotePath + filename;
  90. var _localFile = localPath + server.host + '/' + filename;
  91. ssh.getFile(server, _remoteFile, _localFile, function(err, server, conn) {
  92. if (err) {
  93. console.log(err)
  94. }
  95. conn.end();
  96. cb3(null, 'two')
  97. })
  98. }
  99. ], function(err, c) {
  100. cb2()
  101. })
  102. }, function(err) {
  103. cb1()
  104. })
  105. }
  106. ], function(err, result) {
  107. callback('get file success!!!')
  108. })
  109. }
  110. }
  111.  
  112. /*
  113. put file to remote-servers function
  114. ----------------------------------------------------------------------------------------------
  115. */
  116. exports.putFiles = function(ips, filename, localPath, remotePath, callback) {
  117. if (!ips || !filename || !remotePath || !localPath) {
  118. console.log('putFiles ERR - 缺少参数')
  119. }
  120. else {
  121. async.waterfall([
  122. function(cb1) {
  123. var servers = [];
  124. for(var i = 0; i < ips.length; i++) {
  125. var _server = {};
  126. _server['host'] = ips[i];
  127. _server['username'] = 'root';
  128. _server['privateKey'] = fs.readFileSync('/home/kevalin/.ssh/id_rsa');
  129. servers.push(_server)
  130. }
  131. cb1(null, servers)
  132. },
  133. function(servers, cb1) {
  134. async.each(servers, function(server, cb2) {
  135. var _localFile = localPath + filename;
  136. var _remoteFile = remotePath + filename;
  137. ssh.putFile(server, _localFile, _remoteFile, function(err, server, conn) {
  138. if (err) {
  139. console.log(err)
  140. }
  141. conn.end();
  142. cb2()
  143. })
  144. }, function(err) {
  145. cb1()
  146. })
  147. }
  148. ], function(err, result) {
  149. callback('put file success!!!')
  150. })
  151. }
  152. }

[原创]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. POJ(2186)强连通分量分解

    #include<cstdio> #include<vector> #include<cstring> using namespace std; ; vector& ...

  2. JVM体系结构之六:堆Heap之2:新生代及新生代里的两个Survivor区(下一轮S0与S1交换角色,如此循环往复)、常见调优参数

    一.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...

  3. oracle--pl/sql变量定义----

    一.变量介绍 在编写pl/sql程序时,可以定义变量和常量:在pl/sql程序中包括有: 1).标量类型(scalar) 2).复合类型(composite) --用于操作单条记录 3).参照类型(r ...

  4. JavaScript中设置cookie的值

    cookie 与 session 是网页开发中常用的信息存储方式.Cookie是在客户端开辟的一块可存储用户信息的地方:Session是在服务器内存中开辟的一块存储用户信息的地方.JavaScript ...

  5. hbase java API跟新数据,创建表

    package hbaseCURD; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import o ...

  6. Learning Python 008 正则表达式-002 findall()方法

    Python 正则表达式 - findall()方法 重点 findall()方法的使用 - 程序讲解 简单的符号的使用 正则表达式的库文件是re,先导入库文件: import re .的使用举例 # ...

  7. 菜鸟大充电啦啦啦啦啦:eclipse SDK 是什么啊

    为什么下载是,没有单独的ecipse呢,,总是eclipse-sdk呢 而且还很大几百兆 回复1: Eclipse有好多专用名称,例如Eclipse SDK等.先说一下SDK, Eclipse Pro ...

  8. kinect2跑高博的orbslam2的过程(仅供自己参考记录)

    首先感谢高博的无私奉献!http://www.cnblogs.com/gaoxiang12/p/5161223.html 程序所在的目录为:/home/zty/catkin_ws/src/iai_ki ...

  9. c# 指针unsafe/fixed -- 【一】

    指针C#unsafefixed 目录(?)[-] 概述 unsafe fixed 1.1 概述 unsafe关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的.可以在属性.方法.类的声明中使 ...

  10. HDU 3400 Line belt (三分嵌套)

    题目链接 Line belt Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...