標準の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を使用してこれをきちんと実行する方法はありますか?