使用带有shell的Node模块SSH2

时间:2013-10-31 15:22:59

标签: node.js shell ssh

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

我找到了一个节点的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字节的数据”没有显示。我该如何解决这个问题?

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

2 个答案:

答案 0 :(得分:2)

ssh2目前还没有使用streams2,因为由于两个(stdout和stderr)" sub - "流并试图以理智的方式处理背压,事情变得棘手。我仍然希望我能通过streams2找到一些解决方案。

目前,您必须转而听取数据','排水等事件。

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

答案 1 :(得分:0)

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

查看:

自述文件中的详细信息,提供的测试示例,git wiki中的其他信息。 https://www.npmjs.org/package/ssh2shell

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