使用 shell 脚本双向 socat。 echo、读取,然后交给 socat

使用 shell 脚本双向 socat。 echo、读取,然后交给 socat

有一个VMM不符合标准VSOCK实现:Firecracker

它为每个来宾创建一个 v.sock unix 套接字文件

普通的 VSOCK-CONNECT:cid:1234 则变为:

UNIX-CONNECT:/path/to/v.sock -
CONNECT 1234
OK 1234567890

此时,VMM 会在来宾上建立与 VSOCK-LISTEN:1234 的连接,并将您放入该连接中。

关于嘉宾:

socat VSOCK-LISTEN:1234,reuseaddr,fork exec:'/bin/bash -li',pty,stderr,setsid,sigint,sane

我尝试过的方法根本不起作用:

/vbin/fireshell:

#!/bin/bash
echo 'CONNECT 1234'
read
exec socat - file:`tty`,rawer

然后在主机上:

socat UNIX-CONNECT:/srv/firecracker/test/root/v.sock exec:/vbin/fireshell

但它不起作用,并且错误没有意义:

socat[7110] E exactly 2 addresses required (there are 4); use option "-h" for help

我不知道该怎么做才能获得足够的解决方案,以下方法确实有效,但它也在一定程度上污染了外壳并创建了不需要的套接字:

socat UNIX-CONNECT:/srv/firecracker/test/root/v.sock,end-close UNIX-LISTEN:/vbin/shell.sock,reuseaddr,fork

然后

socat - UNIX-CONNECT:/vbin/shell.sock
CONNECT 1234
OK 1073741841
bash-5.1# ^C

只有之后我才能得到我想要的 shell,尽管有些污染,但一旦你 ctrl+c 或输入一次,似乎就可以工作。

socat UNIX-CONNECT:/vbin/shell.sock file:`tty`,rawer

当然有某种方法可以使用 socat 干净地完成此操作,而无需编码和编译解决方案?

相关内容