virt-managerでKVMホストにリモート接続する


 最近、公私ともに KVM による仮想環境を割と使っているのだが、管理については適当で、virsh で操作する程度だった。とはいえ、完全仮想化した CentOS を大量に飼ってたり VNC でコンソールに接続する際に virsh vncdisplay → vncviewer に接続先入力といった面倒がちょこちょこ発生したりして面倒なので、遅ればせながら virt-manager を使ってみた。

 要件としては、

  • KVM ホストに対して SSH でリモート接続。
  • SSH は公開鍵認証。
  • 秘密鍵のファイル名はデフォルト以外のものにしたい。

といったところだろうか。

 まず、ホスト側の SSH についてセットアップしておく。ホストに対して root で SSH ログインする必要があるので、まず /etc/ssh/sshd_configPermitRootLoginyes にしておく必要がある。

 次に、root 用の鍵ペアを作成する。今回はホスト側で作成した。

ssh-keygen -t ecdsa

 生成された公開鍵を /root/.ssh/authorized_keys に追記しておく。

 次に接続元のクライアントに秘密鍵を持ってくる。今回は ~/.ssh/hoge.ecdsa に置くものと仮定するが、パーミッションが 0600 であることを確認する。

 次に ~/.ssh/config に設定を追記する。デフォルトファイル名の id_ecdsa を使える環境ならこれは不要だが、インフラ回りの仕事をしていると各環境の秘密鍵を使い分けていたりするのでこれはあったほうがいい。ただし、~/.ssh/config の設定を使って接続した場合、/etc/hosts にホスト名を追記して置かないと VNC 接続ができなくなる。今回は、hoge という設定名にしたと仮定する。

Host hoge
  HostName     192.168.xxx.xxx
  IdentityFile ~/.ssh/hoge.ecdsa
  User         root

 この状態で、正しく SSH 経由で root ログインできるかを確認しておいたほうがよい。

ssh hoge

 VNC 接続用に、忘れずに /etc/hosts にもホストを追加しておく。

192.168.xxx.xxx hoge

 クライアント側の設定はこれで終了なので、続いて KVM ホスト側の設定を行う。Gentoo Linux の場合は /etc/libvirt/libvirt.conf に接続可能な URI が記述されているので、ここに今回のホストを追加しておく。URI 内のホスト名は ~/.ssh/config に書いたものを書けばよい。

uri_aliases = [
  "hogekvm=qemu+ssh://root@hoge/system"
]

 この後、libvirtd を再起動する。既に仮想マシンが走っている場合はシャットダウンされるので、あらかじめマイグレーションするなどして退避しておく必要がある。

 最後に、クライアント側で virt-manager を立ち上げ、接続を追加する。

virt-managerで接続を追加

 無事に接続できれば以下のようにホストで飼っている仮想マシンの一覧が表示される。表示されない場合は、正しく SSH 接続できるか uri_aliases を正しく設定しているかあたりを確認する。

virt-manager

 適当に仮想マシンをダブルクリックするなり右クリックメニューから「開く」を押すなりして VNC クライアントをたちあげてみる。エラーが表示されずに VNC の画面になれば問題ない。

virt-manager + VNC クライアント

 VNC に接続できない場合、大体以下が考えられる。

  • VNC 接続の際に virt-manager 接続時の URI を利用するが、ホスト名が解決できない。
    /etc/hosts に追記。
  • そもそも VNC 接続できない。
    virsh edit で VNC 接続できるように設定をかえて仮想マシンを再起動する。
  • iptables 的な何か。
    ファイアウォールの設定を変更する。

 シリアルコンソールの設定だけしておいて virsh console でなんとでもなると思っていた時期もあったが、そもそも /etc/inittab が書き換わったりしてシリアルコンソールが使えなくなるとにっちもさっちも行かなくなることがある。そのときに備える意味でも、VNC 経由での接続が簡単にできる上に負荷状況がわかりやすい virt-manager の準備をしておくというのも重要かも知れない。



カテゴリー: KVM