打开多个term.js终端

时间:2015-05-22 19:19:39

标签: javascript node.js ssh

如何在term.js中打开多个终端?

我正在使用带有ssh2模块的term.js。

例如方案:

客户 - >打开socket并连接到node.js服务器 - > node.js服务器通过ssh2连接第三方服务器

我一次只能打开1个终端。有合理的方法吗?

代码例如:

server.js

    io.of('/ssh').on('connection', function (socket) {
    var conn = new ssh();
    conn.on('ready', function() {
        conn.shell(function(err, stream) {
            if(err)
                return socket.emit('data', 'error');

            socket.on('data', function(data) {
                if(stream)
                    stream.write(data.content);
            });

            stream.on('data', function(data) {
                socket.emit('data', data.toString('binary'));
            });
        });
    }).connect({
        host: 'localhost',
        username: 'user',
        password: 'password'
    });
});

client.js

socket = io.connect('http://localhost');
socket.on('connect', function() {
    term = new Terminal({
        cols: 80,
        rows: 20,
        convertEol: true,
        useStyle: true,
        cursorBlink: false,
        screenKeys: true
    });

    term.on('data', function(data) {
        socket.emit('data', data);
    });

    term.open(document.getElementById('container'));

    socket.on('data', function(data) {
        term.write(data);
    });

    socket.on('disconnect', function() {
        term.destroy();
    });
});

如果term.js有标签变通方法,我也会很高兴。

1 个答案:

答案 0 :(得分:0)

我做了一个多终端工作,但对于系统ssh客户端,我认为你可以使用相同的技巧。

var io = require("socket.io").listen(82);
var pty = require("pty.js");

io.sockets.on("connection", function(socket) {
 var buff = [];

 var term = pty.spawn("/usr/bin/ssh", ["root@localhost"], {
  name: "xterm-256color",
  cols: 120,
  rows: 40,
  cwd: process.env.HOME,
  env: process.env
 });

 term.on("data", function(data) {
  return !socket ? buff.push(data) : socket.emit("data", data);
 });

 while(buff.length) {
  socket.emit("data", buff.shift());
 }

 socket.on("data", function(data) {
  term.write(data);
 });

 socket.on("disconnect", function() {
  socket = null;
  term.kill();
 });
});