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)
root@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を使ってシェルコマンドを実行することでした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);
});
...最初の解決策のようにもハングします。
私の最後のアイデアは、NodeJS-App を終了し、終了した NodeJS-App からパラメータを指定してオペレーティング システムssh
コマンドを実行することでした。しかし、これを行う方法が見つかりませんでした。考えてみると、終了したプロセスから返されるのはエラーコードだけであることに気付きました。したがって、完全なstdin/stdout/stderrを取得するのはchild_processでなければなりません...しかし、これを行う正しい方法は何ですか?
また、Dropbear-Servers で動作しますか?