표준 VSOCK 구현을 따르지 않는 VMM이 있습니다: 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
그런 다음에만 원하는 셸을 얻을 수 있습니다. 일부 오염에도 불구하고 Ctrl+C를 누르거나 한 번 입력하면 작동하는 것처럼 보입니다.
socat UNIX-CONNECT:/vbin/shell.sock file:`tty`,rawer
솔루션을 코딩하고 컴파일할 필요 없이 socat을 사용하여 이를 깔끔하게 수행할 수 있는 방법이 있습니까?