从nodejs我一直在尝试在远程服务器上执行linux命令,并在流中获取输出以进行进一步处理。为了连接到远程linux服务器,我有所有必要的细节,如serverip,用户名和密码。我在互联网上搜索了很多,发现这可以通过ssh实现。
Can Nodejs ui page run shell cmd to remote machine and run script
但是这个答案有点令人困惑,而且我还没有得到如何使用密码。
指向任何工作示例都会有很大的帮助。
答案 0 :(得分:1)
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
上述示例运行
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