Eu desenvolvi um aplicativo NodeJS, e ele tem uma função para se conectar ao UNIX / Linux via SSH , o código é:
console.log('Starting server...');
var express = require('express');
var path = require('path');
var app = express();
app.set('port',3000);
app.use(express.static(path.join(__dirname, 'views')));
var server = app.listen(app.get('port'), function () {
console.log('listening on 3000');
var Client = require('ssh2').Client;
var conn = new Client();
conn.on('ready', function() {
console.log('Client :: ready');
conn.exec('show system info | match uptime', function(err, stream) {
if (err) throw err;
stream.on('close', function(code, signal) {
console.log('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: '10.10.10.10',
port: 22,
username: 'user',
password: 'password'
});
})
O problema surge quando inicio o servidor Node, o aplicativo tenta se conectar a um Firewall do Palo Alto e não há resposta quando o comando é enviado. Mas, se eu definir os parâmetros para conectar um host RedHat ou um CentOS, o comando é executado e eu posso registrar a resposta.
O resultado atual é:
Starting server...
listening on 3000
Fisrt test!
Client :: ready
O resultado esperado deve ser:
Starting server...
listening on 3000
Fisrt test!
Client :: ready
uptime: 246 days, 15:40:05
Eu sei o resultado porque eu me conecto ao firewall via Putty.
Nota: Eu registrei o resultado stream
, e comparei o resultado entre a conexão com o firewall e a conexão com outro servidor RedHat e há uma coisa estranha, o servidor me fornece o parâmetro _remoteVer: 'OpenSSH_7.4',
, e o firewall _remoteVer: 'OpenSSH_12.1',
, mas a versão mais recente do OpenSSH é 7.7 / 7.7p1 (lançado em 2018-04-02), não entendo porque a versão do firewall é maior.
Há algo errado ou faltando?