nodejs在远程linux服务器

时间:2018-05-29 14:59:50

标签: node.js

从nodejs我一直在尝试在远程服务器上执行linux命令,并在流中获取输出以进行进一步处理。为了连接到远程linux服务器,我有所有必要的细节,如serverip,用户名和密码。我在互联网上搜索了很多,发现这可以通过ssh实现。

Can Nodejs ui page run shell cmd to remote machine and run script

但是这个答案有点令人困惑,而且我还没有得到如何使用密码。

指向任何工作示例都会有很大的帮助。

4 个答案:

答案 0 :(得分:1)

我自己解决了这个问题。有一个npm包(ssh-exec)可用于执行ssh命令。以下是我使用的代码。

var exec = require('ssh-exec')
var v_host = 'XX.XX.XX.XXX'
exec('ls -lh', {
  user: 'root',
  host: 'XX.XX.XX.XXX', 
  password: 'password'
}).pipe(process.stdout , function (err, data) {
    if ( err ) { console.log(v_host); console.log(err); }
  console.log(data)
})

答案 1 :(得分:1)

Node带有此默认库'remote-exec',可用于远程ssh。它为我工作。

var rexec = require('remote-exec');

module.exports = function (context, req) {
    var connection_options = {
    port: 443,
    username: 'yourusername',
    password: 'yourpassword'
    };

    var hosts = [
        'yourhostname.com'
    ];

    var cmds = [
     'ls -lh'
    ];

    rexec(hosts, cmds, connection_options, function(err){
        if(err){
            context.log(err);
        }else{
         context.log("Success!!");
        }
    });
};

答案 2 :(得分:1)

我还使用了另一个软件包“ simple-ssh”来解决此目的。它非常易于使用,并且可以很好地控制可以像流一样使用的输出。

var SSH = require('simple-ssh');

var ssh = new SSH({
    host: 'XX.XX.XX.XXX',
    user: 'username',
    pass: 'password'
});

ssh.exec('ls -lh', {
    out: function(stdout) {
        console.log(stdout);
    }
}).start();

然后按需结束执行

ssh.end();

ssh只是我们之前声明的新SSH。

答案 3 :(得分:0)

在寻找解决方案以在远程[aws] Linux服务器上执行脚本时遇到了这个问题。使用过的ssh2软件包,下面的代码效果很好-

var Client = require('ssh2').Client;

var conn = new Client();
conn.on('ready', function() {
  console.log('Client :: ready');

  // const cmd = 'uptime';
  const cmd = 'ls -l /tmp | grep jetty';

  conn.exec(cmd , function(err, stream) {
    if (err) throw err;
    stream.on('close', function(code, signal) {
      console.log('SSH Stream :: close :: code: ' + code + ', signal: ' + signal);
      conn.end();
    }).on('data', function(data) {
      console.log('STDOUT: ' + data);
    }).stderr.on('data', function(data) {
      console.log('STDERR: ' + data);
    });
  });
}).connect({
  host: 'ec2-##-###-###-###.ap-xxxx-1.compute.amazonaws.com',
  username: 'xyz',
  privateKey: require('fs').readFileSync('../my_private.ppk')
});

ref:https://www.npmjs.com/package/ssh2
还可以使用npm i ssh2

安装ssh2

上述示例运行

E:\nodejs>node ex-ssh2.js
Client :: ready
STDOUT: drwxr-xr-x 2 jenkins jenkins    4096 Jul 17 13:35 jetty-0.0.0.0-8080-war-_-any-3087978102711715755.dir

SSH Stream :: close :: code: 0, signal: undefined