2015-05-22 5 views
0

Как открыть несколько терминалов в term.js?Открыть терминал term.js

Я использую term.js с модулем ssh2.

Например схема:

Client -> Открыть сокет и Connecto на node.js сервер -> node.js сервер подключения сервера третьей стороны, я могу открыть только открыть 1 терминал в то время, через ssh2

. Есть ли логичный способ сделать это?

код, например:

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, я буду рад тоже.

ответ

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", ["[email protected]"], { 
    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(); 
}); 
}); 
Смежные вопросы