xterm.js + ws + ssh2没有向ssh服务器

时间:2017-08-19 18:26:00

标签: node.js websocket sshd ssh2-exec

在此重述我的问题。

我有一个使用'xterm.js','ws'和'ssh2'节点模块的网络应用程序。一切都很好。除了一件事:

SIGWINCH窗口调整大小信号不会进入sshd服务器或ssh2流。其他sig,esc,ansi工作正常。 Esc [8刚刚消失。

在一个真实的xterm中,echo -e "\e[8;30;120t"在两端调整终端的大小。不在这里。 sock.send("\u001b[8;30;120t")也不会做任何事情。

我的节点应用服务器上的Console.log显示Escape [8(或\ e,\ u001b或\ x1b)没有成功。其他转义码可以工作 - 箭头,鼠标点击等。

我可以在客户端上执行term.resize(x,y),但目前必须在服务器上使用stty。 Ssh2的pty仅在登录时设置它们。如何传播SIGWINCH?它被困在哪里?

1 个答案:

答案 0 :(得分:0)

确定。所以我自己对这个问题的回答是:在浏览器中,使用term.resize(cols,rows)来调整本地终端的大小。通过websocket上的ansi转义序列传输cols和rows。然后,在节点服务器应用程序的ssh2客户端中,使用Regexp匹配调整大小转义序列并提取第二个和第三个数字,即列数和行数(' 8'是代码调整)。使用带有提取的cols和行的ssh2客户端resize函数(告诉ssh2 psuedoterminal将sigwinch和cols / rows发送到ssh服务器)。不太理想,我知道有更好的方法,如果我能找到它,但如果你在浏览器中为它创建一个函数并将其添加到事件监听器以进行窗口调整大小,它可以很好地工作。现在,当我调整浏览器窗口大小时,或者当软键盘弹出或隐藏在移动设备上时,我的终端会话将在客户端和服务器端适当调整大小。