如何通过 tcp 套接字将 CTRL+c 特殊字符发送到交互式 bash?

如何通过 tcp 套接字将 CTRL+c 特殊字符发送到交互式 bash?

我通过 TCP 网络使用交互式bashshell,但无法弄清楚如何将 CTRL+c 序列发送到远程bash

我首先运行netcat实例(这是我与远程 bash 交互的地方):

nc -nvlp 8000

然后,从远程运行(为了简单起见,我使用本地主机,这样你就可以在另一个终端本地尝试):

bash -i >& /dev/tcp/localhost/8000 0>&1

现在,在 netcat 终端中出现了交互式 bash,我可以向它发送命令,命令会被执行并显示结果。

我还没弄清楚的是如何将 CTRL+c 序列传播到远程 bash 并在进程中忽略它netcat


这是我到目前为止所尝试过的:

nc -nvlp 8000 & trap "printf '\003' >/proc/$!/fd/0" INT; fg; trap 0 INT

这会netcat在后台启动,设置,如果收到,trap则将文件结束序列 ( 0x03) 打印到 netcat 的标准输入。SIGINT

然后,使用该fg命令将该netcat进程带到前台,以便可以开始交互式会话。执行命令工作得很好,但是当我使用 CTRL+c 序列时,netcat会因130返回代码而死掉,在netcatbash终端中都不会打印任何内容。

最后一个陷阱会重置SIGINT处理程序。

bash过程以返回代码结束0,表明成功。

有什么想法,如何做到这一点?

答案1

我不确定这是否是您想要的,但您可以将 netcat 进程置于后台(按 CTRL+Z),键入stty raw -echo然后恢复该进程。现在应该可以了。

相关内容