有一个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 干净地完成此操作,而无需编码和编译解决方案?