我在徘徊是否有一个有效的解决方案可以从 NodeJS-APP 中将远程终端连接到 OpenWRT-Box?
从终端工作连接:ssh -i ~/.myKeys/id_rsa root@192.168.178.39
BusyBox v1.23.2 (2015-04-22 23:25:48 UTC) 内置外壳 (ash)
根@openwrt:~#
NodeJS的唯一交互式 ssh 解决方案不执行 README.md 中描述的交互式部分,如下所示:
var Client = require('ssh2').Client;
var conn = new Client();
conn.on('ready', function() {
console.log('Client :: ready');
conn.shell(function(err, stream) {
if (err) throw err;
stream.on('close', function() {
console.log('Stream :: close');
conn.end();
}).on('data', function(data) {
console.log('STDOUT: ' + data);
}).stderr.on('data', function(data) {
console.log('STDERR: ' + data);
});
stream.end('ls -l\nexit\n');
});
}).connect({
host: '192.168.100.100',
port: 22,
username: 'frylock',
privateKey: require('fs').readFileSync('/here/is/my/key')
});
它仅针对 OpenSSH 进行测试。此ssh2 节点库顶部的解决方案设置也不起作用。它是为识别提示而构建的(例如)
所以我的下一个想法是,使用 stdin 和 stdout 执行 shell 命令child_process
var spawn = require('child_process').spawn;
var ssh = spawn('ssh', ['-tt', 'root@'+host]);
process.stdin.resume();
process.stdin.on('data', function (chunk) {
ssh.stdin.write(chunk);
});
... 也像第一个解决方案一样挂起。
ssh
我的最后一个想法是退出 NodeJS-App 并使用已终止的 NodeJS-App 中的参数执行操作系统命令。但我找不到办法做到这一点。经过思考,我注意到......它只是一个错误代码,没有其他什么是从终止的进程中返回的。所以它必须是一个 child_process 才能获得完整的 stdin/stdout/stderr ......但是正确的方法是什么?
它适用于 Dropbear-Servers 吗?