双方向 socat にシェルスクリプトを使用します。エコーして読んでsocatに渡します。

双方向 socat にシェルスクリプトを使用します。エコーして読んでsocatに渡します。

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

ベストアンサー1

おすすめ記事