Ubuntu Weekly Recipe

第480回ウェブブラウザーから操作できる軽量管理ツール「Cockpit」

Cockpitはかんたんに使えて、軽量で、マルチサーバーにも対応したウェブベースのLinuxシステム管理ツールです。シェル端末機能もついているため、ウェブブラウザーから直接システムを管理することも可能です。今回はこのCockpitをUbuntuにインストールする方法を紹介します。

Linuxサーバーの「UI」となるCockpit

Cockpitをインストールすると次のような処理を、ウエブブラウザーから行えるようになります。

  • ユーザーアカウント管理
  • システムの再起動やシャットダウン
  • systemdを使用したサービスの起動・停止・有効化・無効化などの設定
  • systemdのjournalctlを利用したシステムログの閲覧
  • udisks2もしくはstoragedを利用したストレージ関連のモニタリング
  • NetworkManagerを利用したネットワーク管理
  • Performance Co-Pilotで取得した各種メトリクスの表示
  • PackageKit経由のパッケージ管理
  • Web UIが動いているマシンから他の管理マシンへのSSHログイン
  • Dockerコンテナの管理
  • 管理対象システム上のシェル操作

見も蓋もない言い方をすれば「Webminのようなもの」です。とは言えCockpitはCockpitなりのポリシーをもって開発を行っています。端的に言うと、なるべく独自のデータ構造を持たないようにし、システムのあるがままの設定を変更します。これによりソースコードをシンプルな形に保ち、余計な依存関係を排除し、ほぼ最小構成のサーバー上でも動くようになっています。またCockpitそのものの設定もシンプルで、たいていのシステム上ではインストールしたら特別な設定なくそのまま動きます。また余計なリソース消費がないように注意して作られており、管理ツールのWeb UIのためのツールが常駐することを避け、ユーザーがログインしようとして初めてUIサービスが立ち上がる仕組みになっているのです。

その開発には主にRedHatの開発者たちが関わっているようです。そのためSOS Reportの取得やサブスクリプションの管理なども行えます。ちなみに昨年末、Ubuntuの主要な開発者としてUbuntuの草創期から支えてきたMartin PittがCanonicalを離れRed Hatに移籍しました。そのMartin Pittも、移籍後にこのCockpitの開発に積極的に関わっています。

そして今年の3月にはDebian DeveloperとしてのMartin Pittが自分自身でCockpitをDebianパッケージ化し、リポジトリに取り込んでいます。つまりUbuntuの公式リポジトリからもCockpitをインストールできるようになっている、というわけです。パッケージを作った時期が今年の3月であるため、Debian 9には取り込まれていません。Ubuntuだと17.04以降であればパッケージが存在します。

さらに今年の5月には、最新のCockpitパッケージがUbuntu 16.04 LTSにバックポートされました。よってUbuntu 16.04 LTS以降であれば、Cockpitをaptコマンドからかんたんにインストールできるようになったのです。

Cockpitのインストール

Ubuntu 16.04 LTSの場合、Cockpitは次のようにバックポートリポジトリを指定してインストールします。17.04以降であれば-t xenial-backportsを省いてください。もしくは-t リリース名-backportsと指定すれば、個々のリリースごとのより新しいバージョンがインストールされます。

$ sudo apt -t xenial-backports install --no-install-recommends cockpit
(中略)
The following NEW packages will be installed:
  cockpit cockpit-bridge cockpit-dashboard cockpit-system cockpit-ws dconf-gsettings-backend dconf-service glib-networking
  glib-networking-common glib-networking-services gsettings-desktop-schemas libcrack2 libdconf1 libjson-glib-1.0-0 libjson-glib-1.0-common
  libproxy1v5 libpwquality-common libpwquality-tools libpwquality1 libssh-4
0 upgraded, 20 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,999 kB of archives.
After this operation, 4,907 kB of additional disk space will be used.
(後略)

--no-install-recommendsオプションつけずにインストールすると、NetworkManager経由でデスクトップ関連のパッケージも一緒にインストールしてしまいます。サーバー用途のマシンであれば、cockpit-storagedパッケージやcockpit-networkmanagerパッケージは、必要に応じて別途--no-install-recommendsオプションをつけて)インストールしたほうが良いでしょう。

基本的にインストールしただけでセットアップ完了です。Ubuntuの場合はsystemdのSocket Unitが自動的に有効化されています。

$ systemctl status cockpit.socket
● cockpit.socket - Cockpit Web Service Socket
   Loaded: loaded (/lib/systemd/system/cockpit.socket; enabled; vendor preset: enabled)
   Active: active (listening) since Sun 2017-07-16 09:08:43 UTC; 19min ago
     Docs: man:cockpit-ws(8)
   Listen: [::]:9090 (Stream)

これにより9090番ポートにアクセスしてはじめてCockpitのサービスを立ち上げることになります。つまりサービスを常駐させる必要がないため、⁠Cockpitを使用していない時は余計なリソースを使わない」ことが実現できているのです。

$ systemctl status cockpit.service
● cockpit.service - Cockpit Web Service
   Loaded: loaded (/lib/systemd/system/cockpit.service; static; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:cockpit-ws(8)

Cockpitへのアクセス

インストールができたので、次はCockpitのWeb UIにアクセスしてみましょう。ウェブブラウザーから「https://(Cockpitをインストールしたマシンのアドレス):9090/」を表示してください。まず最初に証明書のエラーが表示されるはずです。

図1 おなじみの証明書エラー
画像

Cockpitは起動時に/etc/cockpit/ws-certs.d.certで終わる証明書ファイルが存在しない場合は、自己署名証明書を自動生成します。そのため上図のようにSEC_ERROR_UNKNOWN_ISSUERのエラーが表示されるわけです。正式な対応としては、正当な認証局から署名されたSSL/TLSの証明書を利用することでしょう。最近だとLet's Encryptを利用すればかんたんに証明書を取得できます ※1⁠。作成した証明書ファイルは/etc/cockpit/ws-certs.dに配置してください。拡張子が.certのファイルをファイル名でソートした上で、もっとも後ろに来るファイルが使われます

そのまま自己署名証明書を使う場合は、フィンガープリントなどを確認しておきましょう。

図2 証明書の表示
画像
$ sudo openssl x509 -in /etc/cockpit/ws-certs.d/0-self-signed.cert -noout -text -fingerprint -sha256
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 18178437666814379984 (0xfc46c8be960d47d0)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: O=cd7d49e86dca4b89b455011597378bc8, CN=cockpit
(中略)
SHA256 Fingerprint=88:5C:92:47:98:AE:8B:95:46:AA:30:EA:EE:3C:EF:5C:5E:1E:65:DE:AC:B7:19:9A:B8:F1:E4:9C:A1:79:6B:38

証明書の確認が終わったら、ログイン画面が表示されます。ちなみにこの画面で「Cockpit」を使っていることを主張していないのも、Cockpitのポリシーのひとつです。紛らわしいかもしれませんが、画面の中の「cockpit」はホスト名です。

図3 ログイン画面
画像

ログインアカウントはCockpitのWeb UIが動いているサーバーのローカルユーザーのアカウントをそのまま利用します。初期設定ではそのアカウントのユーザーとパスワードを用いて、HTTPS経由のBasic認証とPAM経由の認証を行うことになります。ドキュメントによるとKerberosを用いたSSOも設定できるようです。ちなみに同じドキュメントにはWeb UIのみをDockerコンテナとして動かして、ホストへはSSHでアクセスする手段も存在するとの記載があります。

とにもかくにもパスワードログインを使う場合は、サーバーのユーザーのパスワードを有効にしておく必要があります。LXDコンテナの場合は、パスワードをロックしていることが大半なので、sudo passwd ubuntuなどで適切なパスワードを設定しておいてください[2]⁠。

図4 システムモニター(CPUや電源の操作)
画像
図5 システムモニター(メモリー・ストレージI/O・ネットワークトラフィック)
画像

ログインしたらそのシステムのモニタリング画面が表示されます。このシステムモニターはリアルタイムのデータしか表示しません。つまりログインしていない間の情報は取得や記録を行いません。何かあってからログインしても、システムの状態の遷移はわからないので注意してください。もしモニタリングツールとして使いたい場合は、Performance Co-Pilotなどの別の機構を使って記録したログを描画することになるでしょう[3]⁠。

図6 journalctlからのログ表示
画像
図7 ローカルアカウントの管理やSSH公開鍵の追加
画像
図8 systemctlを使ったサービスの管理
画像
図9 ウェブベースのシェル
画像

Cockpitはウェブベースのシェル機能を備えています。WebSocket経由でログインすることでそのユーザー権限で立ち上がるcockpit-bridgeが、シェルを起動することになりますので、普通にSSHログインしたときと同じような使い方ができます。つまり必要であればここからsudoを使ってシステム管理を行えるのです。ちなみにByobuを起動することも可能ではありますが、⁠C-a c」のようなキーバインディングはシェルには伝わりません。Fキーによる操作なら可能です。

別のマシンを登録する

Cockpitは複数のマシンをひとつのダッシュボード上で管理する機能をサポートしています。つまり一台のマシンにCockpitのWeb UI(cockpit-ws)をインストールして、他のマシンにはCockpitの情報収集を行う部分(cockpit-bridgeとその他のプラグイン)のみをインストールします。cockpit-wsはSSHを用いて他のマシンのcockpit-bridgeを立ち上げ、必要な情報を取得したり、Web UIからの操作を反映します。具体的な概念はCockpitドキュメントの図が参考になるでしょう。

まず追加対象となるマシンにcockpit-bridgeをインストールしましょう。ついでにsystemd関連の機能やシェル機能を提供するcockpit-systemも一緒にインストールしておきます。

$ sudo apt -t xenial-backports install --no-install-recommends cockpit-bridge cockpit-system

マシン間のアクセスはSSHのみサポートしています。つまりcockpit-wsが動いているマシンからWeb UIからログインしたユーザーの権限で、cockpit-bridgeへとSSHログインできる必要があるわけです。もしcockpit-bridge側のSSHサービスがパスワードログインを許可しているなら、そのパスワードを設定します。ただし公開鍵認証もサポートしています。アクセス権の管理をしやすいように、cockpit-ws上にCockpit用のSSHの鍵を作成して、対象のマシンのauthorized_keysに追加しておきましょう。

cockpit-wsが動いているマシン上の公開鍵は、画面右上のユーザー部分から「Authentication」を選択することでCockpitで使うかどうかを設定できます。パスフレーズを設定している鍵なら、その入力も必要になります。

図10 SSH鍵のアンロック
画像

SSH鍵が使えるようになったら「Dashboard」から「Servers」のプラスボタンを押して、新規マシンを追加しましょう。

図11 サーバーの追加:グラフのカラーも設定できる
画像

追加するマシンのアドレスをここで入力します。公開鍵でSSHログインできる状態になっているのであれば、それだけで設定完了です。もしSSH公開鍵を未設定で、さらに追加するマシンがパスワードログインを許可しているのなら、パスワード入力ダイアログが出てきます。他にもKerberosを使ったSSOにも対応しているようです

図12 サーバーが追加された
画像

このようにCockpitは、インストールがかんたんで軽量であるにも関わらず、必要な機能を一通り揃えたシステム管理ツールです。いざとなればシェルを立ち上げてなんとかできる安心感もあります。たとえばLXDのように一台のサーバー上で複数のコンテナを動かすにあたって、個々のコンテナ用の軽量な管理ツールがほしい場合に、Cockpitを使ってみてはいかがでしょうか。

おすすめ記事

記事・ニュース一覧