vsh - Vsock SHell

編集

はじめに

編集

vshは、vsockを介して操作されるリモートシェルです。sshのようなものですが、最初の「s」を「v」に置き換えたものです。

なぜvshを使うのか?

編集

SSHは、ネットワークを介してリモートマシンにシェルを取得するための事実上の標準です。これは、デスクの下のマシンやクラウドのVMにとって多くの意味をなします。

SSHが提供する最も重要な機能は次のとおりです:

  • ホスト認証により、正しいマシンと通信していることを確認します。
  • ユーザー認証により、承認されたユーザーのみがサインインし、自分自身としてのみサインインします。
  • 暗号化により、2つのマシン間の通信を盗聴することを防ぎます。

vshは1つのユースケースに焦点を当てています:同じマシン上のVMに接続します。これにより、要件を大幅に簡素化できます。

  • ホスト認証はvsockによって提供されます。VMはvsockのコンテキストIDを偽装できないため、IPとは異なります。vsockはマシンローカルなので、MitM攻撃の心配はありません。
  • ユーザー認証は必要ありません。vshはホストからゲストへのみ使用され、ホストは常により特権があると見なされます。
  • 暗号化は必要ありません。vsockはルーティングできないため、トラフィックはホストとゲストのメモリ間を直接移動します。ホストカーネルの脆弱性がない限り、VMは他のVM向けのトラフィックを観察することはできません。

暗号化の必要がないため、vshの設定は簡単で、VMプロジェクトに簡単に統合できます。vsockはゲスト側の構成を必要としないため、ゲストOSにネットワークを構成する必要はありません。

特長

編集

vshは次のことができます:

  • 対話型シェル(bashなど)およびワンショットコマンドの実行ができます。
  • 対話型と非対話型の使用方法を検出できます。これにより、バイナリデータをvshを介してパイプ処理したり、stdoutとstderrの出力を別々に処理したりできます。
  • ゲストサイドプロセスからの終了ステータスを転送できます。
  • 特定のシグナルを転送できます。SIGHUP、SIGINT、SIGQUIT、またはSIGTERMを送信すると、シグナルがリモートプロセスに転送されます。これは、Tastなどの非対話環境で、ゲストサイドプロセスをきれいに終了させるために役立ちます。

使用例

編集
  • vsock cid 3でVM上のシェルを起動する。
  • 名前がfooのVMでシェルを起動する。これには、vm_concierge経由でVMが起動されている必要があります。
  • 名前がfooのVMでルートシェルを起動する。
  • termina VMでlxc listを実行する。
  • ホストファイルfooをpenguinコンテナの/barに書き込む。
  • penguinコンテナからホストのbarに/fooファイルを書き込む。

vshのcrosvmインスタンスのセットアップ

編集

まず、ゲスト側にvshd実行ファイルが必要です。termina dlcがその1つの取得方法です。vshdはvm_tools.imgに含まれています。

次に、crosvmを--cid=3およびvm_tools.imgとともに起動します。

最後に、ゲストで次のコマンドを実行してvshdを起動します。

これにより、vshのcrosvmインスタンスが正常にセットアップされます。