Ubuntu Weekly Recipe

第639回 Ubuntuに「トラブル時に」ログインするいろいろな方法

この記事を読むのに必要な時間:およそ 10 分

障害が発生したリモートのマシンにログインする

ここまでの手順はマシンに物理的にアクセスできることが前提でした。たとえばシングルユーザーモードやInitramfsは,マシンにディスプレイやキーボードが繋がっていないと使えませんし,ライブインストーラーを使用したり仮想マシンイメージを構築する方法は,USBデバイスを接続したりストレージデバイスを取り外す必要があります。

サーバーのようにリモートにあるマシンにトラブルが発生し,どうしても正規の方法以外でログインしたい場合はどうするのが良いでしょうか。この手のものは重要度が高いと冗長化されており,たとえ何かが故障したとしても待機系に自動的に切り替わってそのまま接続できたりします※8⁠。

※8
ただしその待機系ですら,たとえマニュアル通りに設定してあったとしても,トラブル時に自動的に切り替わってくれるとは限りません。いやほんと。設定を行ったあとはきちんとテストしましょう。

待機系を用意する余力も,⁠どこでもドア」を用意できる運も備えていない場合は,⁠何らかの方法でリモートからGRUBやInitramfsの画面に到達する」しかありません※9⁠。

※9
別にこれだけでなく,他にも回避策は考えられるのですが,今回の記事も長くなってしまったのでまた次回以降に。

機材を問わず実現できる可能性が高いのは,⁠シリアルコンソールを別のマシンにつないでおく」方法です。前回の記事の最後の「シリアルコンソールからログインする」では,UbuntuのGRUBとログインプロンプトをシリアルコンソールに出力する方法を紹介しました。この方法を使えば常にシリアルコンソールから操作できるようになっているので,あとはそれを別のマシンから操作できるようにしておくのです。

最近だとシリアルポートのないマシンは多いですが,USBシリアル変換ケーブルを使えば比較的簡単に増設できます。たとえばRaspberry Piか何かを起動しておいて,マシンがうまく起動できなくなったらRaspberry Pi経由でシリアルコンソールを見る,といった使い方が考えられるでしょう。Wake on LANも合わせて設定しておけば,⁠不意に電源が切れた時の暫定リカバリー策」ぐらいにはなるはずです※10⁠。

※10
Wake on LANに関しては第135回のPowerWakeとgWakeOnLanでWake-on-LANも参考になるはずです。

リモートのマシンがサーバースペックであれば,BMC(Baseboard Management Controller)が載っていることも多いでしょう。これはCPUとは独立して動くコントローラーで,サーバーが通電していれば(≒電源ケーブルが繋がっていれば⁠⁠,CPU的には電源断状態であってもサーバーをネットワーク経由でコントロールできる仕組みです。

BMCがあればシリアルコンソール経由の操作,BIOSメニューの操作,サーバーの電源管理,温度などセンサーの確認などもCPUの状態とは独立してネットワーク経由で操作できます。

BMCはIPMI(Intelligent Platform Management Interface)の仕様に基づいてコントロールできることが一般的です。よってBMCとIPMIはあまり区別なく言及されますし,DellならiDRAC,HPならiLOみたいなブランド名で説明されることもあります。

BMC/IPMI経由でマシンをコントロールするための口は大抵の場合は,いわゆる「LANケーブル」がつながるようになっていることでしょう。接続口そのものは,BMC/IPMI専用だったり,通常のネットワークインターフェースと共用だったりとサーバーマシンや購入オプションによってまちまちです。後者の場合,BMC用のIPアドレスとCPUから見えるネットワークのIPアドレスは異なるアドレスを独立して設定できます。ただしBMC/IPMI専用の口と比べて,ネットワークケーブルやその先にトラブルが発生した場合に対応できないという問題はあります。

Ubuntuの場合,IPMIの操作にはipmitoolコマンドを利用できます※11⁠。

※11
他にもipmiutilとかfreeipmiとかOpenIPMIとかさまざまな実装が存在します。
$ sudo apt install ipmitool

テストには電源状態の確認コマンドを使うと良いでしょう。

$ ipmitool -I lanplus -H <BMC/IPMIのIPアドレス> -U <ユーザー名> power status

-I lanplusはどのようにBMC/IPMIにアクセスするかを指定します。ネットワーク経由ならlanplus(IPMI v2.0)かlan(IPMI v1.5)になるでしょう。指定しない場合,-Hが使われていたらlanが,そうでなければopenが指定されたものとします。openの場合,/dev/ipmi0経由でローカルマシンのBMCにアクセスするため,管理者権限が必要です。

ネットワーク経由だとアクセス時にBMC/IPMIのパスワードが問われます。-P <パスワード>で指定も可能ですがコマンド履歴に残るためあまりおすすめはしません。

これで電源のオン/オフがわかりますし,statusの代わりにonやoff,resetなどを指定することで電源を操作することも可能です。

IPMIで運用上おそらく一番よく使うのがシリアルコンソールへのログインです(SOL:Serial Over LAN⁠⁠。

$ ipmitool -I lanplus -H <BMC/IPMIのIPアドレス> -U <ユーザー名> sol activate

solがSerial Over LAN関連の設定であることを意味し,activateによって実際にSerial Over LANを有効化します。Ubuntu側が正しく起動していて,なおかつシリアルコンソールが有効化されていたらログインプロンプトが表示されるはずです。表示されなかったら,何回かエンターキーを押してみてください。それでも表示されないなら何らかの設定に問題があります。

シリアルコンソールから抜けるのは~.⁠チルダドット)を入力します。ただしSSH経由でipmitoolを実行していると,SSH側をログアウトしてしまいます。SSHの先のIPMIのシリアルコンソールを抜けたい場合は,SSHの段数の数だけチルダを入力しましょう。たとえばSSHでリモートマシンにログインし,その上でipmitoolでさらに先のリモートサーバーにコンソールログインしているとき,コンソールを抜けるには~~.⁠チルダチルダドット)と入力することになります。

サーバー側のBIOS設定で「シリアルコンソールリダイレクト」を有効化しておけば,本来VGAに表示されるデータがアスキー文字に変換されてシリアルコンソールにも出力されます。つまりBMC/IPMIのSOLとシリアルコンソールリダイレクトを組み合わせれば,リモートからBIOSメニューを操作することも可能です。

ちなみにBMC/IPMIのIPアドレスやパスワードは,BIOSメニューや起動時に選択できるサーバー固有の管理インターフェース,サーバーマシンによってはウェブブラウザー経由で設定可能です。通常は物理的にアクセス可能な,サーバーの設置時に設定することになります。しかしながらローカルマシンからのipmitoolコマンドによってコマンド経由でも設定できるのが一般的です。つまりサーバーマシンそのものにipmitoolコマンドをインストールしておけば,Ansibleなどの構成管理システムからサーバーごとのBMC/IPMI設定も管理できるのです。

他にもいろいろなことができるので,一度はipmitoolのmanページを読んでおくと良いでしょう。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。