zoukankan      html  css  js  c++  java
  • [原创]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('
    
    ', '').replace('
    ', '');
                            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!!!')
            })
        }
    }
  • 相关阅读:
    Django ORM多表操作
    Django 单表查询作业-笔记
    python 2 编码问题
    HTML-Bootstrap下载和基本使用
    Django ORM单表操作之增删改查
    Django ORM简介和单表创建的设置和过程
    Django --总结 之URL路由控制 视图相应,视图请求,和模板语法
    Django URL控制器
    JAVA编程
    UMI 的原理分析带有 UMI 的数据
  • 原文地址:https://www.cnblogs.com/kevalin/p/4522306.html
Copyright © 2011-2022 走看看