首页 > 解决方案 > bash shell 模式?如何通过管道将请求发送到远程服务器上的 shell

问题描述

我在 Node.js 中有这个 tcp 服务器,它将打开一个 shell 并将请求通过管道传输到 shell:

const net = require('net');
const cp = require('child_process');

const server = net.createServer(s => {

  const bash = cp.spawn('bash');
  s.pipe(bash.stdin, {end:false});
  bash.stdout.pipe(s);
  bash.stderr.pipe(s);


});


server.listen('4004');

我像这样用 netcat 连接到它:

nc localhost 4004

当 bash 打开时,我得到了这样的东西(字面意思):

pwd
/app

ls -a
.
..
Dockerfile
main.js
run.sh


^[[B^[[A

制表符完成不起作用,当我点击向上箭头键时 - 我得到了^[[B^[[A1字符 - 所以我认为 bash 有两种模式或其他东西 - 写入标准输出并等待标准输入......因为在 bash 中通常当我点击向上/向下箭头键它将输出以前的命令,除非命令当前正在写入标准输出,然后我将获得该 garbolly-gunk 输出。

有谁知道如何在远程服务器上重新创建良好的 shell 体验?我上面的代码“有效”,但它不是一个真正的终端,只是一个 bash 进程或其他东西。

标签: shellterminalttynode.js

解决方案


推荐阅读