第18章 ゲストのリモート管理

このセクションでは、ゲストをリモートで管理する方法について説明しています。

18.1. トランスポートモード

リモート管理用に、libvirt では次のようなトランスポートモードに対応しています。
Transport Layer Security (TLS)

Transport Layer Security TLS 1.0 (SSL 3.1) で認証され、暗号化される TCP/IP ソケットは、通常パブリックポート番号でリッスンします。これを使用するには、クライアントとサーバーの証明書を生成する必要があります。標準のポートは 16514 です。詳細は、「TLS と SSL 経由のリモート管理」 を参照してください。

SSH

Secure Shell protocol (SSH) 接続上のトランスポートです。libvirt デーモン (libvirtd) がリモートマシン上で実行されている必要があります。ポート 22 が SSH アクセス用に開いていなければなりません。いずれかの SSH キー管理 (ssh-agent ユーティリティーなど) を使用しないとパスワードの入力が求められます。詳細については、「SSH によるリモート管理」 を参照してください。

UNIX ソケット

UNIX ドメインソケットはローカルマシン上でのみアクセス可能です。ソケットは暗号化されておらず、認証のために SELinux または UNIX 権限を使用します。標準のソケット名は /var/run/libvirt/libvirt-sock/var/run/libvirt/libvirt-sock-ro (読み取り専用の接続) です。

ext

ext パラメーターは、libvirt の範囲外の手段によりリモートマシンに接続できる外部プログラムに使用されます。このパラメーターはサポートされていません。

TCP

暗号化されていない TCP/IP ソケットです。実稼働での使用には推奨されません。通常は無効になっていますが、管理者はテストを行う場合や信頼できるネットワークでこれを有効にできます。デフォルトのポートは 16509 です。

デフォルトのトランスポートモードは、他に指定がない場合は TLS です。
リモート URI

URI (Uniform Resource Identifier) は、リモートホストに接続するために virshlibvirt によって使用されます。また URI は --connect コマンドの virsh パラメーターと一緒に使用すると、リモートホストで単一コマンドや移行を実行することができます。リモート URI は一般的なローカル URI を取り、ホスト名またはトランスポート名、またはそれら両方を追加して形成されます。特殊なケースとして、「リモート」の URI スキームを使用すると、リモート libvirtd サーバーは最適なハイパーバイザードライバーを探索するように指示されます。これはローカル接続用に NULL URI を渡すのと同等です。

libvirt URI は一般的な形式を取ります (角括弧 [] 内の中身はオプションの関数を表します)。
driver[+transport]://[username@][hostname][:port]/path[?extraparameters]
ハイパーバイザー (ドライバー) が QEMU の場合、パスは必須になることに注意してください。
以下は有効なリモート URI のいくつかの例です。
  • qemu://hostname/
外部の場所を対象とする場合は、トランスポートメソッドまたはホスト名を指定する必要があります。詳細は、libvirt アップストリームドキュメント を参照してください。

リモート管理の例

  • host2 という名前のリモート KVM ホストに接続します。SSH トランスポートを使用し、SSH ユーザー名は virtuser です。それぞれの connect コマンドは connect [URI] [--readonly] です。virsh connect コマンドの詳細は、「virsh Connect を使用したハイパーバイザーへの接続」を参照してください。
    qemu+ssh://virtuser@host2/
  • TLS を使用して、host2 という名前のホスト上のリモート KVM ハイパーバイザーに接続します。
    qemu://host2/

テスト用サンプル

  • ローカルの KVM ハイパーバイザーに非標準の UNIX ソケットで接続します。この例では、UNIX ソケットへの完全パスが明示的に指定されています。
    qemu+unix:///system?socket=/opt/libvirt/run/libvirt/libvirt-sock
  • 暗号化していない TCP/IP 接続で libvirt デーモンに接続します。IP アドレスが 10.1.1.10 でポートが 5000 のサーバーへの接続です。この例ではデフォルト設定の test ドライバーが使用されています。
    test+tcp://10.1.1.10:5000/default
追加の URI パラメーター

追加パラメーターをリモート URI に追加することができます。以下の表に認識されているパラメーターを示します。これ以外のパラメーターはすべて無視されます。パラメーターの値は URI エスケープされる必要があることに注意してください (つまり、疑問符 (?) をパラメーターの前に付けると、特殊文字が URI 形式に変換されます)。

表18.1 追加の URI パラメーター

名前トランスポートモード説明使用法の例
nameすべてのモードname はリモート virConnectOpen 関数に渡されます。通常 name はリモート URI から transporthostnameport numberusername、および追加パラメーターを取り除いたものになります。ただし、一部の複雑なケースでは、name を明示的に指定するのが適切な場合もあります。name=qemu:///system
commandssh と ext外部コマンドです。外部トランスポートの場合に必須になります。ssh の場合、デフォルトは ssh です。command の PATH が検索されます。command=/opt/openssh/bin/ssh
socketunix と sshUNIX ドメインソケットへのパスで、デフォルトを上書きします。ssh トランスポートの場合、これがリモート netcat コマンドに渡されます (netcat を参照)。socket=/opt/libvirt/run/libvirt/libvirt-sock
no_verifytlsゼロ以外の値が設定されていると、クライアント側のサーバー証明書チェックが無効になります。サーバー側のクライアント証明書チェックまたは IP アドレスチェックを無効にする場合は、libvirtd の設定を変更する必要があります。no_verify=1
no_ttysshゼロ以外の値に設定すると、リモートマシンに自動的にログインできない場合に SSH がパスワードの入力を求めないようにします。ターミナルにアクセスできない場合にこれを使用します。no_tty=1