我通过 TCP 网络使用交互式bash
shell,但无法弄清楚如何将 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
返回代码而死掉,在netcat
和bash
终端中都不会打印任何内容。
最后一个陷阱会重置SIGINT
处理程序。
该bash
过程以返回代码结束0
,表明成功。
有什么想法,如何做到这一点?
答案1
我不确定这是否是您想要的,但您可以将 netcat 进程置于后台(按 CTRL+Z),键入stty raw -echo
然后恢复该进程。现在应该可以了。