小型/堅牢/メンテナンスフリー OpenBlockS 600の限界に挑戦

第4回Conserverで作るコンソールサーバ

はじめに

第4回目となる今号は、OpenBlockS 600(以下、OBS600)をコンソールサーバとして利用する手順を解説します。

コンソールサーバとは

各種機器のコンソールにネットワークを介して接続するハードウェア、またはサービスのことです。機器が設置されているネットワークの外から、シリアル接続などのコンソールを操作できるようになります。

Conserverとは

シリアル、ssh、telnet等でのサーバへの接続を一元管理するアプリケーションです。各接続先サーバへのアクセス権限の管理や操作ログの保存、複数ユーザによる同時モニタリングなどが可能です。多数のサーバ/ネットワーク機器などの管理が必要となる環境で、必要とされる機能が多数用意されています。今回の例ではサーバを接続先の対象にしていますが、ルータやスイッチなどのネットワーク機器や制御機器などでも同様に利用可能です。

準備

Conserverのインストール

OBS600のWebインターフェースのアプリケーションマネージャ、またはコマンドラインから「Conserver」をインストールします。コマンドラインからのインストールは次のようにpkg_addコマンドを使用します。

# pkg_add conserver8

機器構成

今回は3台のサーバを用意して、シリアル/telnet/sshの通信プロトコルで動作を確認します。

server1のCOM1ポートとOBS600の背面にあるRS232Cポートを、標準添付の変換コネクタとケーブルで接続します。server2、server3は、図1のとおりにネットワーク設定を行い、sshやtelnetでの接続準備を行っておきます。

図1 機器構成図
図1 機器構成図

OBS600の設定

OBS600にシリアルコンソール、またはsshで接続して作業を行います。シリアルコンソールでの接続方法については、本製品の簡単導入ガイドを参照してください。sshによる設定方法は、OBS600のWebインターフェースにアクセスして[システム⁠⁠→⁠基本設定]ページの「SSH Server」「有効」に設定して、OBS600を再起動します。

接続対象のホスト名の設定

通常ホストの設定は/etc/hostsファイルに記述しますが、OBS600のWebインターフェースの設定に基づき、OBS600が起動するごとに/etc/hostsファイルを再作成する仕様になっています。接続先ホストの設定はWebインターフェースの[ネットワーク⁠⁠→⁠その他]で設定するか、/usr/pkg/etc/hosts.appendファイルを編集することで行うことができます。記述方法はhostsファイルと同様です。図1の機器構成にしたがってホストを追加しますリスト1⁠。

リスト1 /usr/pkg/etc/hosts.append
172.16.14.90 server1 
172.16.14.91 server2 
172.16.14.92 server3

rc.confの編集

ConserverをOBS600起動時に自動実行する場合は、/etc/rc.confに記述する必要があります。Conserverの起動スクリプトは/usr/pkg/etc/rc.dにあり、図2のように実行します。

図2 アプリケーション自動起動設定
# ls /usr/pkg/etc/rc.dappmgr conserver8 
# echo conserver8 YES >> /etc/rc.conf

設定内容を本体のFlashROMに保存

OBS600の通常起動時ではRAMディスクにルートファイルシステムを展開しているため、明示的に保存の操作を行わない限り、再起動すると変更内容が初期状態に戻ります。変更内容を保存するには、次のコマンドを実行します。なおこのコマンドは、シャットダウン処理の中でも自動的に実行されます。

# flashcfg -s /etc/flashcfg

conserver.cfの編集

アプリケーションマネージャ、またはpkg_addコマンドでインストールしたプログラムの設定ファイルは、/usr/pkg/etcディレクトリに置かれます。Conserverの設定ファイル名は、conserver.cfとなります(/usr/pkgディレクトリはCFメモリをマウントしているため、FlashROMに保存する必要はありません⁠⁠。

conserver.cfはリスト2のように編集します。

リスト2 /usr/pkg/etc/conserver.cf
default full {        ←①
	rw root,plathome;
	ro watch; 
} 

default * {           ←②
	logfile /usr/pkg/var/consoles/&;
	logfilemax 1m;
	timestamp 1hab;
	include full;
	master localhost; 
} 

console ssh {         ←③
	type exec;
	exec ssh user2@server2; 
} 

console telnet {       ←③
	type exec;
	exec telnet server3; 
} 

console serial {       ←③
	type device;
	device /dev/ttyS1; parity none; baud 115200; 
}
  • ①default fullブロック:ユーザのアクセス制御の設定
    rwはキーボード入力できるattach read/write権限で、rootとplathomeユーザに与えています。roは参照のみのread only権限で、watchユーザに与えています。全員にrw権限を与える場合は ⁠rw *⁠と記述します。⁠ro !root⁠と記述すると、rootユーザ以外全員をro権限に設定できます。

  • ②default *ブロック:conso leブロックの共通の設定
    logfile行のログファイル名に ⁠&⁠を指定することでコンソールごとの別ファイルで保存することができます。 logfilemax行でログのローテートサイズを指定します。今回は1Mバイトに設定しています。timestamp行で1時間ごとにタイムスタンプをログファイルに出力する設定にしています。そのログが出力された日時がわかるようになります。

    1h1時間。他に分(m⁠⁠、(d⁠⁠、ログ(l)の行数で指定可能
    aコンソールへの接続/切断のログを出力
    bbreak信号をログに出力
  • ③コンソールごとの設定
    ssh、telnetは外部コマンドを使用するので、type行がexecとなります。exec行で起動するコマンドと起動オプションを記述します。serialは、シリアルポートに接続しますので、type行がdeviceとなります。device行でデバイスファイルとボーレートなどの通信設定を記述します。

conserver.passwdの編集

今回、 Conserverにアクセスするパスワードはシステムのパスワードと同一にしたため、リスト3の記述になります。

リスト3 /usr/pkg/etc/conserver.passwd
*any*:*passwd*

server1の設定

server1は、入出力をCOM1ポートでもできるように設定します。

grubの設定

カーネルの起動オプションにconsole出力の設定を行います。/boot/grub/menu.lstファイルのkernel行に、⁠console=tty1 console=ttyS0,115200⁠を追加しますリスト4⁠。

リスト4 /boot/grub/menu.lst(抜粋)
title    Debian GNU/Linux, kernel 2.6.26-2-686
root     (hd0,0) 
kernel   /boot/vmlinuz-2.6.26-2-686 root=/dev/sda1 ro console=tty1 console=ttyS0,115200
initrd   /boot/initrd.img-2.6.26-2-686

inittabの設定

ttyS0の設定を追加しますリスト5⁠。

リスト5 /etc/inittab(抜粋)
# Example how to put a getty on a serial line
# (for a terminal)
# 
T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100
# T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100

動作確認

Conserverの起動

Conserverの起動スクリプトを実行します図3⁠。設定で指定したssh、telnetの各コマンドが常駐します。

図3 Conserverの起動
# /usr/pkg/etc/rc.d/conserver8 start
Starting conserver.
# ps ax
  PID  TTY   STAT  TIME  COMMAND 
    1  ?     Ss    0:58  init [2]
〈略〉
 9830  ?     Ss    0:00  sshd: root@pts/3 
 9832  pts/3 Ss    0:00  -bash 
 9862  ?     Ss    0:00  /usr/pkg/sbin/conserver -d 
 9863  ?     S     0:00  /usr/pkg/sbin/conserver -d 
 9868  pts/0 Ss+   0:00  telnet -l user3 server3 
 9869  pts/1 Ss+   0:00  ssh user2@server2 
 9879  pts/3 R+    0:00  ps ax

Consoleコマンド

コンソールへの接続は、consoleコマンドで行います。consoleコマンドは、/usr/pkg/etc/conserver.cfで定義したコンソール名(ssh、telnet、serial)を引数にして実行します。consoleコマンド実行中の操作は、ctrl+e、c、?を順番に押下することで、簡単なヘルプが表示されます。

ssh、telnet、serialでの接続をそれぞれ図4、5、6のように行います。

図4 sshへの接続
# console ssh
Enter root@ssdlinux.example.org's password: ←①OpenBlockS 600のrootユーザのパスワードを入力
[Enter `^Ec?' for help]
[-- MOTD -- just a simple ssh to server2]
 ←②空リターンを入力
Connection closed by 172.16.14.91
The authenticity of host 'server2 (172.16.14.91)' can't be established.
RSA key fingerprint is ce:e7:4a:c1:6f:f5:2e:68:06:09:31:13:68:a7:63:55.
Are you sure you want to continue connecting (yes/no)? yes  ←③yesを入力
Warning: Permanently added 'server2,172.16.14.91' (RSA) to the list of known hosts.
user2@server2's password:             ←④パスワードを入力
Last login: Thu Aug 26 16:56:30 2010 from 172.16.14.98
SSD/Linux 0.5-20100723/2.6.29 #1 SMP Fri Jul 23 16:28:00 JST 2010

$
図5 telnetへの接続
# console telnet
Enter root@ssdlinux.example.org's password: ←①OpenBlockS 600のrootユーザのパスワードを入力
[Enter `^Ec?' for help]
[-- MOTD -- just a simple telnet to server3]
 ←②空リターンを入力
Login incorrect
server3 login: user3  ←③ログインIDを入力
Password:             ←④パスワードを入力
server3[7]

$
図6 serialへの接続
# console serial
Enter root@ssdlinux.example.org's password: ←①OpenBlockS 600のrootユーザのパスワードを入力
[Enter `^Ec?' for help]
 ←②空リターンを入力
Debian GNU/Linux 5.0 server1 ttyS0

server1 login: user   ←③ログインIDを入力
Password:             ←④パスワードを入力
Linux server1 2.6.26-2-686 #1 SMP Mon Jun 21 05:58:44 UTC 2010 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/
copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.
user1@server1:?

$

終了コマンド

consoleコマンドの終了方法は、ctrl+e、c、.を順番に押下します。ctrl+eを入力しても画面に変化はありません。cを入力すると⁠[⁠が表示され、.を入力すると⁠disconnect]⁠が表示されてコンソールが切断されます図7⁠。

図7 終了コマンド(ctrl+e、c、.)
$ [disconnect]
#    ←sshが切断されてOBS600のプロンプトに戻ります

コンソールの切り替え

ctrl+e、c、;を順番に押下することで、コンソールを切り替えられます。⁠[console:⁠の後にコンソール名を入力します図8⁠。

図8 コンソールの切り替え(ctrl+e、c、;)
$ [console: serial]
[Enter ^Ec? for help]
  ←空リターンを入力
Debian GNU/Linux 5.0 server1 ttyS0 

server1 login:

同一コンソールへの接続

Conserverでは1つのコンソールに対して1人のみキー入力ができます。後からの接続はRead onlyとなります。Read onlyコンソールは入力権限を持っているユーザのキー入力を1文字ずつリアルタイムでモニタリングします。入力権限を持っているユーザが切断した場合、入力権限が回ってきます。

図9はrootユーザがsshのコンソールに接続しているときに、後からplathomeユーザが同じコンソールに接続したときのplathomeユーザのコンソール出力です。

図9 同一コンソールへの接続
$ console ssh 
Enter plathome@ssdlinux.example.org s password:
[Enter ^Ec? for help]
[no, root@localhost is attached]   ←①
[read-only -- use ^E c ? for help] ←②
pwd   ←③
/home/user2
$ 
[attached]    ←④
  • ①rootユーザがすでに接続している
  • ②plathomeユーザは参照のみ
    コンソールの操作をしたい場合は、ctrl+e、c、fを押下することで強制的に入力権限を得ることができ、rootユーザがRead Only権限に変更されます
  • ③rootユーザがpwdコマンドを実行した結果が表示
  • ④rootユーザが切断したため、入力権限を取得

ログファイル

コンソールのログファイルは、conserver.cfで設定した/usr/pkg/var/consoles/にコンソール名ごとに別ファイルで格納されています。

# ls /usr/pkg/var/consoles/
serial ssh telnet

sshのログ

ログファイルから、図9のログを抜粋しますリスト6⁠。

リスト6 sshのログ(抜粋)
[--root@localhost attached --Mon Aug 30 17:42:04 2010]  ←①

Permission denied, please try again.
user2@server2's password:
Last login: Mon Aug 30 17:32:02 2010 from 172.16.14.98
SSD/Linux 0.5-20100723/2.6.29 #1 SMP Fri Jul 23 16:28:00 JST 2010 

server2[21]$ pwd
/home/user2
server2[22]$ v/^H ^Hi /etc/hosts^C  ←②
server2[22]$
server2[22]$
server2[22]$ [--root@localhost detached --Mon Aug 30 17:42:56 2010]  ←①
[--plathome@localhost attached --Mon Aug 30 17:42:56 2010]  ←①

server2[22]$ pwd
/home/user2
  • ①接続/切断のログ(conserver.cfのtimestamp 1habのaの機能)
  • ②タイプミスもロギングされる

serialのログ

console serialのログを抜粋しますリスト7⁠。

リスト7 serialのログ(抜粋)
[--root@localhost attached --Tue Aug 31 11:53:45 2010]  ←①

Debian GNU/Linux 5.0 server1 ttyS0 

server1 login: user1
Password: 
Last login: Mon Aug 30 11:41:13 EDT 2010 on ttyS0
(略)
Debian GNU/Linux 5.0 server1 ttyS0 

server1 login: [--MARK --Tue Aug 31 14:00:00 2010]  ←②
root 
Password: 
Last login: Tue Aug 31 09:39:14 EDT 2010 on ttyS0
  • ①接続/切断のログ
  • ②タイムスタンプのログ(conserver.cfのtimestamp 1habの1hの機能)

まとめ

OpenBlockS 600とConserverでコンソールサーバを構築しました。ログファイルから以前の操作手順を参照したり、オペレータの教育に利用したりとさまざまな使い方ができると思います。

弊社ではOpenBlockSのカーネルのデバッグを行う際に、ネットワーク越しにカーネル起動ログを確認する用途などで重宝しています。コンソールサーバのようなCPUパワーを必要とせず、省スペース、低消費電力、メンテナンスフリーを重要視される場面は、当製品の得意分野です。この記事を機会に、OpenblockS 600をはじめとするマイクロサーバ製品に興味を持っていただけたら幸いです。

参考ページ

Conserver
URL:http://www.conserver.com/

おすすめ記事

記事・ニュース一覧