El module ssh2 falla silenciosamente con cnetworkings que tienen éxito desde CLI

He ssh satisfactoriamente ssh 'd en Google Cloud Compute a través de CLI con un command como el siguiente:

 ssh -i ~/.ssh/my-ssh-key me@ipnumber 

Pero el uso del module ssh2 no da salida, incluidos los errores.

 var fs = require('fs'); var Client = require('ssh2').Client; var connSettings = { host: IP, // 'XXX.XXX.XXX.XX' port: PORT, // XXXX username: ME, privateKey: privateKey, //fs.readFileSync(location, 'utf8') passphrase: passphrase, password: password }; var conn = new Client(); conn.on('ready', function() { //first example in README console.log('Client :: ready'); conn.exec('uptime', function(err, stream) { if (err) throw err; //nothing stream.on('close', function(code, signal) { console.log('Stream :: close :: code: ' + code + ', signal: ' + signal); //nothing conn.end(); }).on('data', function(data) { console.log('STDOUT: ' + data); //nothing }).stderr.on('data', function(data) { console.log('STDERR: ' + data); //nothing }); }); }) .on('error', function(err) { console.error('err', error); //nothing }) .connect(connSettings); 

Estoy rastreando /var/log/secure ya que estoy depurando el script del nodo y puedo ver las inputs de logging cuando ssh y cierro la session desde CLI, pero nada cuando bash a través del nodo ssh2 .

¿Qué podría estar causando que esta connection falle silenciosamente?

ACTUALIZACIÓN : tengo la buena autoridad de que su cliente registrará la cadena de identificación del server , y que se envía inmediatamente después de la connection. Entonces, si no ve esa información, debe ser el caso de que el server no envíe nada . Ahora que lo intentó con CLI SSH y funciona, una vez que excluimos lo imposible, la única explicación restante, por improbable que parezca, es que no se está conectando al mismo server / puerto . Por alguna razón, el puerto 8080 en el server de destino no está ejecutando un server SSH2.

Una posible interpretación es la siguiente: el server ejecuta otra cosa en el puerto 8080, que permite la connection pero no envía nada inicialmente (por ejemplo, un server HTTP). Cuando se conecta con CLI SSH, cree que está utilizando el puerto 8080, pero por alguna razón esa directiva en el file ssh_config no se activa, y la CLI SSH se conecta al server SSH verdadero, y funciona, mientras que el nodo SSH se conecta a un server diferente, y es por eso que no funciona.

Para verificar, intente establecer una connection telefónica con el puerto 8080 de ese server y verifique que responda con un banner SSH2:

 Connected to xxx.xxx.xxx.xxx port 22 Escape character is '^]'. SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8 ^C Connection closed by foreign host. 

Si no responde con el letrero "SSH -…", creo que esto demuestra suficientemente que el CLI SSH se está conectando en otro lugar. ¿Dónde? Para descubrir esto, ejecute nuevamente CLI SSH con debugging:

 ssh -vvv xxx.xxx.xxx.xxx ... 2>&1 | grep "Connecting to" 

(Tendrás que salir pulsando Ctrl-C). Esto debería darte:

 debug1: Connecting to whatever [xxx.xxx.xxx.xxx] port XYZK 

Y los valores xxx.xxx.xxx.xxx y XYZK son los que deberá pasar al cliente de node .

RESPUESTA ANTERIOR

No estoy familiarizado con el SSH2 de nodejs , pero tenía una biblioteca SSH2 (de código cerrado, en eso) me toqué este truco hace unos meses. "Conectado …" seguido de nada .

Resultó que el cliente usaba un encryption que el server no soportaba y, por algún motivo, mientras el cliente CLI de OpenSSH2 lo muestra, la biblioteca optó por no mostrar el error. Fue bastante complicado llegar al background de las cosas.

Veo en la página de GitHub que algunas cifras requieren "nodo v0.11.12 o más nuevo". ¿Es este tu caso? De lo contrario, puede intentar actualizar el node .

En cualquier caso, seguiría la sugerencia de @ AttRigh y ejecutaría un sshd en el server en modo de debugging. Si tu no puedes:

  • registrar la salida del cliente ssh2 CLI en modo de debugging completa y extraer el encryption que utiliza
  • configurar un server sshd con ese encryption y no otros,
  • ejecuta tu cliente de nodo contra ese server.

Además, ahora que lo pienso, puedes configurar un server sshd de todos modos con la configuration pnetworkingeterminada, y asegurarte de que te puedes conectar a eso . Esto circunscribiría algo el problema.