Nodejs ssh2 服务器检测击键

Nodejs ssh2 server detect keystrokes

我正在尝试在 nodejs 中创建一个交互式 ssh 服务器,它可以像在正常 linux ssh 会话中一样在客户端处理按键,当您启动 mc 并且之后您可以使用箭头键.我找到了 ssh2 包,但它只能在 'enter' 按键后才能在服务器端解析数据。如何在不按回车键的情况下检测此演示代码中的 y/n 按键?

var fs = require('fs');
var username = null;
var ssh2 = require('ssh2');

new ssh2.Server({
  hostKeys: [fs.readFileSync('ssh.key')]
}, function(client) {
  console.log('Client connected!');

  client.on('authentication', function(ctx) {
    // auth
    ctx.accept();
  }).on('ready', function() {
    console.log('Client authenticated!');

    client.on('session', function(accept, reject) {
      var session = accept();
      session.once('shell', function(accept, reject, info) {
        var stream = accept();
        stream.write("Do you want to continue? Y/N ");

        stream.on('data', function(data) {
          var args = data.toString();
          switch(args[0])
          {
            case "y":
              stream.write("Your choice: y\n");
              break;
            case "n":
              stream.write("Your choice: n\n");
              break;
            default:
              stream.stderr.write("Error!\n");
              break;
          }
          if(typeof stream != 'undefined')
          {
            stream.write("$ ");
          }
        });
      });
    });
  }).on('end', function() {
    console.log('Client disconnected');
  });
}).listen(2222, '127.0.0.1', function() {
  console.log('Listening on port ' + this.address().port);
});

大多数 SSH 客户端只有在能够在服务器端分配 pseudo-TTY 时才会发送单独的击键。否则他们假设服务器只能处理 line-delimited 输入。

默认情况下,ssh2.Server 会自动拒绝您的代码未处理的任何请求,因此对于 pseudo-TTY 请求,您需要在会话对象上侦听 'pty' event 并接受请求。

请注意,接受此类请求即表示您承认您将能够适当地处理任何特定于 'pty' 请求中发送的终端类型的特殊转义序列。