Using SSH over Node.js
Asked Answered
D

2

13

I'm trying to run a ssh child process in node.js and control it through my program. My code:

var util   = require('util');
var spawn = require('child_process').spawn;
var ssh    = spawn('ssh', ['cloudstudios.ch']);

ssh.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

ssh.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

ssh.on('exit', function (code) {
  console.log('child process exited with code ' + code);
});

I can enter the password in the console, but I can't do anything after that. I get the following console ouput:

stderr: Pseudo-terminal will not be allocated because stdin is not a terminal.

[email protected]'s password:
stdout: Linux v 2.6.32-5-xen-amd64 #1 SMP Wed Jan 12 05:46:49 UTC 2011 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

stderr: stdin: is not a tty

Has someone an idea how I can get this to work?

Thanks!

Displode answered 13/3, 2011 at 22:3 Comment(1)
Check this out github.com/steelbrain/node-sshBauxite
B
10

try a little modification:

var ssh = spawn('ssh', ['-tt', 'xxx']);

and:

process.stdin.resume();
process.stdin.on('data', function (chunk) {
  ssh.stdin.write(chunk);
});
Berretta answered 13/3, 2011 at 22:24 Comment(7)
sorry i dont actually know what those pseudo terminals are so no explanation, see man ssh. Also remember the command reset will come handy in these experiments.Berretta
Thanks! That TTY thing is now fixed! But after entering the password and hitting enter, I cannot see any output of ssh. Any idea for this?Displode
I've tested if the commands I enter are executed. And they are! I only don't get the output of the commands. Have you an idea how to get the missing output?Displode
Hey great! I made the mistake and replaced the part of listening to the process data event with part of listening to the stdin data event. Now it works perfectly! Thank you so much!Displode
I'm trying to write the password programmatically to the ssh process. But I can't find a way? Do you know something I could do?Displode
Use public key authentication instead?Plantain
You can use pty.js for passoword sending https://mcmap.net/q/332191/-ssh-client-for-node-js-closedOchlophobia
D
8

I´ve created a SSHClient for node.js now. You can download the sourcecode at https://github.com/VanCoding/NodeSSH.

Hope it will help some other people.

Displode answered 16/3, 2011 at 17:25 Comment(1)
Yes, I changed my name, sorry.Displode

© 2022 - 2024 — McMap. All rights reserved.