分享几个基于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. poj3414Pots(倒水BFS)

    Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13231   Accepted: 5553   Special J ...

  2. java基础知识学习 java异常

    1: Unchecked Exception( 也就是运行时异常) VS  Check Exception(非运行时异常) 2: 运行期异常  VS  非运行期异常? 非运行时异常: 必须在代码中显示 ...

  3. 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 ...

  4. 使用jquery扩展表格行合并方法探究

    1.前言 最近项目中用到一个表格中对于相同内容的数据进行行合并的需求,本来想从网上找个现成的,省的自己再造轮子.于是就开始谷歌了...不过在搜索的过程中,发现找到的工具类很多都有一个前提,就是该表格中 ...

  5. javaIO 流分析总结

    Java中的流,可以从不同的角度进行分类. 按照数据流的方向不同可以分为:输入流和输出流. 按照处理数据单位不同可以分为:字节流和字符流. 按照实现功能不同可以分为:节点流和处理流. 输出流: 输入流 ...

  6. 机器学习前沿热点——Deep Learning

    深度学习是机器学习研究中的一个新的领域,其动机在于建立.模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像.声音和文本.深度学习是无监督学习的一种. 深度学习的概念源于人工神经网络的 ...

  7. shell 自动删除n天前备份

    Linux自动删除n天前备份Linux是一个很能自动产生文件的系统,日志.邮件.备份等.因此需要设置让系统定时清理一些不需要的文件.语句写法:     find 对应目录 -mtime +天数 -na ...

  8. 积累遇到过的linux终端操作指令

    mkdir mkdir命令是常用的命令,用来建立空目录,它还有2个常用参数: -m, --mode=模式 设定权限<模式> (类似 chmod) -p, --parents 需要时创建上层 ...

  9. 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 ...

  10. [MySQL] Data too long for column 'title' at row 1

    李刚轻量级JavaEE第六章的坑..艹李刚自己有没试过这些代码的啊,6.4这一份HqlQuery.java里需要的表,根本就跟他提供的sql脚本对不上啊..坑爹啊,而且字符编码集也有问题. 出现这个原 ...