使用带有shell的Node模块SSH2

我的目标是创build一个Web应用程序,允许用户远程连接到SSH服务器,即不需要在他们的计算机上安装SSH客户端。 所以这意味着我的服务器将是用户和他们的SSH服务器之间的中间接口。

我find了一个用于节点的SSH2模块: https : //github.com/mscdex/ssh2

我想通过使用shell()方法,最合适的连接方法。

以下是获取shell的基本尝试。

 var Connection = require('ssh2'); var c = new Connection(); c.on('ready', function() { c.shell(onShell); }); var onShell = function(err, stream) { if (err != null) { console.log('error: ' + err); } stream.on('readable', function() { var chunk; while (null !== (chunk = stream.read())) { console.log('got %d bytes of data', chunk.length); } }); stream.write('ls\r\n'); console.log('Shell'); } c.connect({ host: 'localhost', port: 22, username: 'matt', password: 'password' }); 

它连接正常,没有错误,但“获得%d个字节的数据”不显示。 我怎样才能解决这个问题?

此外,这种方法在大规模应用中是否合理,可能存在许多同时不同的连接?

ssh2目前还不使用streams2,因为事情变得棘手,因为两个(stdout和stderr)“子”stream,并试图以一种理智的方式处理背压。 我仍然希望能通过streams2find一些解决scheme。

现在,你将不得不倾听“数据”,“stream失”等事件。

更新: ssh2 v0.3.x现在支持streams2。

我为ssh2编写了一个包装类,用于处理在SSH shell会话中运行多个命令,并且可以使用嵌套的主机对象将SSH隧道连接到多个主机。 每个主机configuration对象都有自己的命令,命令事件处理程序,会话处理结束和authentication参数。 可以检查命令响应的提示或结果,这些提示或结果需要额外的处理或从命令数组中添加/删除命令。 它也超时如果一个命令产生意外的提示不处理,并通常会导致进程挂起等待一个永远不会得到的响应。

一探究竟:

自述文件中的大量信息,提供的testing示例,git wiki中的附加信息。 https://www.npmjs.org/package/ssh2shell

https://github.com/cmp-202/ssh2shell