ルータのパスワードリカバリ
パスワードを設定するのはセキュリティ上重要なことですが、そのパスワードを忘れてしまうとまったく作業ができなくなってしまいます。
今回はルータのパスワードを忘れてしまった場合の対処法について実験してみましょう。
パスワードリカバリの概要
基本的な手順
パスワードの設定がstartup-configに保存されている場合、電源を切ったり再起動してもパスワードがリセットされません。そのようなルータにログインしパスワードを再設定するには特殊な手順が必要になります。
パスワード再設定の手順を大まかに書くと以下のようになります。
1.起動時にstartup-configを読み込まない設定にしてデバイスを再起動する
2.startup-configをメモリに読み込む(running-configにコピーする)
3.パスワードを変更する
4.変更した設定を保存する(running-configをstartup-configにコピーする)
5.起動時にstartup-configを読み込む設定にしてデバイスを再起動する
1.起動時にstartup-configを読み込まない設定にしてデバイスを再起動する
Cisco製のルータは、起動時にstartup-configを読み込むことでパスワードを含めた各設定を行います。よって、startup-configを読み込まなければパスワードが設定されていない状態で起動します。パスワードリカバリのためには、まずこの設定を行います。
ルータは、デバイスの動作を制御するコンフィギュレーションレジスタという16ビットのレジスタ(変数)を持ちます。コンフィギュレーションレジスタは電源を切ったり再起動しても内容は消えません(起動時の挙動を制御するためのものなので当然ですが)。
通常のコンフィギュレーションレジスタの値は 0x2102 ですが、これを 0x2142 に変更するとios起動時にstartup-configの値を読み込まなくなります。
iosにもコンフィギュレーションレジスタの値を変更するコマンドがあるのですが、パスワードがわからなくなっている場合はそもそもiosにログインできないのでios上のコマンドは使用できません。そこで、ios起動を中断し、ROM-monという特殊なコマンドモードにすることでコンフィギュレーションレジスタを操作します。
ios起動を中断してROM-monに移行する
パスワードがわからない場合、電源をいったん切ってから再投入することでルータを再起動します。起動中にコンソール接続したターミナルからブレーク信号を送信することで、iosの起動が中断されます。ブレーク信号の送信方法は接続に使用しているターミナルソフトウェアによって違います。
| ターミナルの種類 | ブレーク信号送信の操作 |
|---|---|
| TeraTerm(Windows) | ALT + B |
| PuTTY(Windows) | Ctrl + Break |
| PacketTracer | Ctrl + C |
ブレーク信号の送信はios起動中の短い時間の間に行わなければなりません。
iosの起動を中断し、ROM-monへの以降に成功すると、
monitor: command "boot" aborted due to user interrupt
rommon 1 >
と表示されます。
『rommon 1 >』の部分がROM-monのコマンドプロンプトです。『1』の部分はコマンドを入力するたびに『2』『3』…と増えていきます。
コンフィギュレーションレジスタの値を変更する
ROMmonでコンフィギュレーションレジスタを設定するには、confregコマンドを使用します。
rommon 1 > confreg <設定値>
設定値は『0x2102』のような形式で指定します。『0x2142』を指定するとios起動時にstartup-configを読み込まない設定になります。
再起動する
ROMmonから再起動するには、resetコマンドを使用します。
rommon 2 > reset
コマンド入力後、ただちに再起動します。
2.startup-configをメモリに読み込む(running-configにコピーする)
startup-configを読み込まなければ工場出荷時設定で起動するので、パスワードなしでiosのコマンド入力ができる状態になります。しかし、ここですぐパスワード変更の操作をしても意味がありません。startup-configに記述されているパスワード以外の設定を消してしまわずにパスワードだけを上書きする方法がないのです。
そこで、まずstartup-configをrunning-configとしてメモリ(RAM)上にコピーします。
startup-configのコピーには特権execモードに移行してcopyコマンドを使用します。
# copy startup-config running-config
startup-configをrunning-configにコピーすると、その場でstartup-configに記述されていた設定が有効になります。ただし幸いなことに、既に特権execモードにいるならば再度enable認証を求められるということにはなりません(自分でdisableしてしまった場合は別ですが)。
タイムアウトでログアウトしてしまうとパスワード入力が必要になってしまうので、これ以降の作業は手早く行う必要があります。
3.パスワードを変更する
パスワード変更は、通常通りの手順で行うことができます。
コンソールパスワード
(config)# line console <番号>
(config-line)# password <パスワード>
vtyパスワード
(config)# line vty <開始番号> <終了番号>
(config-line)# password <パスワード>
enableパスワード
(config)# enable password <パスワード>
enableシークレット
(config)# enable secret <パスワード>
4.変更した設定を保存する(running-configをstartup-configにコピーする)
パスワードの設定が終わったら、設定をstartup-configに保存します。先ほどとはファイルの指定順を逆にしてcopyコマンドを実行します。
# copy running-config startup-config
5.起動時にstartup-configを読み込む設定にしてデバイスを再起動する
今度はios起動時にstartup-configを読み込むようにするため、コンフィギュレーションレジスタの値を0x2102に設定します。ios上でコンフィギュレーションレジスタの値を設定するには、グローバルコンフィギュレーションモードでconfig-registerコマンドを使用します。
(config)# config-register <設定値>
ルータを再起動するには、特権execモードでreloadコマンドを使用します。
# reload
これでパスワードの再設定完了です。
やってみましょう
ネットワーク
今回は、ルータに制御用のPCをコンソール接続するだけです。
ルータの設定
コンソールパスワード、enableシークレットおよび『パスワード以外の設定が保存されている』ことを確認するためにホスト名とインターフェイスのIPアドレスを設定しておきます。
| ホスト名 | RT1 |
| Fa0/0のアドレス | 192.168.0.1/24 |
| Fa0/1のアドレス | 192.168.1.1/24 |
| コンソールパスワード | apple |
| enableシークレット | grapefruit |
ここまでの設定は一気にやってしまいましょう。
- コマンド入力
- コピー&ペースト用
Router>enable⏎
Router#configure␣terminal⏎
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#hostname␣RT1⏎
RT1(config)#interface␣fastethernet␣0/0⏎
RT1(config-if)#ip␣address␣192.168.0.1␣255.255.255.0⏎
RT1(config-if)#no␣shutdown⏎
RT1(config-if)#exit⏎
RT1(config)#interface␣fastethernet␣0/1⏎
RT1(config-if)#ip␣address␣192.168.1.1␣255.255.255.0⏎
RT1(config-if)#no␣shutdown⏎
RT1(config-if)#exit⏎
RT1(config)#line␣console␣0⏎
RT1(config-line)#password␣apple⏎
RT1(config-line)#login⏎
RT1(config-line)#exit⏎
RT1(config)#enable␣secret␣grapefruit⏎
RT1(config)#
enable
configure terminal
hostname RT1
interface fastethernet 0/0
ip address 192.168.0.1 255.255.255.0
no shutdown
exit
interface fastethernet 0/1
ip address 192.168.1.1 255.255.255.0
no shutdown
exit
line console 0
password apple
login
exit
enable secret grapefruit設定の保存と確認
設定内容をstartup-configにコピーします。
RT1(config)#exit⏎
RT1#copy␣running-config␣startup-config⏎
Destination filename [startup-config]? ⏎
Building configuration...
[OK]
RT1#
copyコマンドを実行すると、[startup-config]? と表示されてコピー先のファイル名の確認を求められます。よければEnterキーを押すとコピーが実行されます。
コピーできたら、いったん電源をオフ→オンして、ちゃんと設定が保存できているか確認しましょう。
(電源オフ→オン)
System Bootstrap, Version 12.3(8r)T8, RELEASE SOFTWARE (fc1)
Initializing memory for ECC
..
C1841 processor with 524288 Kbytes of main memory
Main memory is configured to 64 bit mode with ECC enabled
Readonly ROMMON initialized
Self decompressing the image :
########################################################################## [OK]
Restricted Rights Legend
(中略)
Press RETURN to get started!
⏎
User Access Verification
Password: (表示されませんが『apple⏎』と入力しています)
RT1>enable⏎
Password: (表示されませんが『grapefruit⏎』と入力しています)
RT1#show␣ip␣interface␣brief⏎
Interface IP-Address OK? Method Status Protocol
FastEthernet0/0 192.168.0.1 YES manual up down
FastEthernet0/1 192.168.1.1 YES manual up down
Vlan1 unassigned YES unset administratively down down
RT1#
コンソールパスワードおよびenableシークレット
ホスト名が『RT1』となっていること
各インターフェイスのアドレス
これらが設定されていることが確認できました。
ではここで、パスワードを忘れてログインできなくなった、とします。
ここからがパスワードリカバリ作業です。
ルータを再起動してROMMONに移行
ルータの電源をオフ→オンし、すぐにターミナルからブレーク信号を送信します。
ブレーク信号の送信方法(再掲)
| ターミナルの種類 | ブレーク信号送信の操作 |
|---|---|
| TeraTerm(Windows) | ALT + B |
| PuTTY(Windows) | Ctrl + Break |
| PacketTracer | Ctrl + C |
System Bootstrap, Version 12.3(8r)T8, RELEASE SOFTWARE (fc1)
Initializing memory for ECC
..
C1841 processor with 524288 Kbytes of main memory
Main memory is configured to 64 bit mode with ECC enabled
Readonly ROMMON initialized
Self decompressing the image :
################ (←この『#』が増えている間にブレーク信号を送信する)
monitor: command "boot" aborted due to user interrupt
rommon 1 >
『rommon』が表示されずiosが起動してしまった場合は、再度ルータの電源をオフ→オンしてやり直して下さい。
コンフィギュレーションレジスタの変更、再起動
コンフィギュレーションレジスタの値を 0x2142(起動時にstartup-configを読み込まない)に変更し、再起動します。今度はブレーク信号を送信せず、iosの起動を待ちます。
startup-configを読み込まない設定になっているので、工場出荷状態で起動します。
『Would you like to enter the initial configuration dialog? [yes/no]:』と問われたら『no』と入力、次いでEnterキーを押してユーザexecモードに入ります。
rommon 1 > confreg␣0x2142⏎
rommon 2 > reset⏎
System Bootstrap, Version 12.3(8r)T8, RELEASE SOFTWARE (fc1)
Initializing memory for ECC
..
C1841 processor with 524288 Kbytes of main memory
Main memory is configured to 64 bit mode with ECC enabled
Readonly ROMMON initialized
Self decompressing the image :
########################################################################## [OK]
Restricted Rights Legend
(中略)
--- System Configuration Dialog ---
Would you like to enter the initial configuration dialog? [yes/no]: no⏎
Press RETURN to get started!
⏎
Router>
startup-configをメモリにコピー
パスワード認証が無効になっている状態(工場出荷状態)でiosが起動したら、特権execモードに移行してstarup-configをrunning-configにコピーします。コピーするだけで設定が復活しますが、すでに特権モードにいるのなら改めてログイン認証やenable認証を求められることはありません。
copyコマンド実行時に『Destination filename [running-config]?』と表示されているのは、コピー先のファイル名が正しいかを確認するメッセージなので、Enterキーを押して先に進みます。
ファイルをコピーした時点で、コマンドプロンプトが『RT1#』に変化していることから、再起動前の設定(ホスト名)が復活していることが判ります。
※下の実行例では、copyコマンド実行後にシステムメッセージが表示されて画面が乱れたので、Enterキーを押してコマンドプロンプトを再表示しています。
Router>enable⏎
Router#copy␣startup-config␣running-config⏎
Destination filename [running-config]? ⏎
648 bytes copied in 0.416 secs (1557 bytes/sec)
RT1#
%SYS-5-CONFIG_I: Configured from console by console
⏎
RT1#
パスワードの再設定
放置してタイムアウトするとログイン認証しなければならなくなるので、すぐにパスワード再設定を行います。
以前のパスワードを忘れてしまったので、改めて以下のようにパスワードを再設定しましょう。
| コンソールパスワード | cobol |
| enableシークレット | fortran |
パスワード再設定の手順は、通常のパスワード設定とまったく同じです。
RT1#configure␣terminal⏎
Enter configuration commands, one per line. End with CNTL/Z.
RT1(config)#line␣console 0⏎
RT1(config-line)#password␣cobol⏎
RT1(config-line)#exit⏎
RT1(config)#enable␣secret␣fortran⏎
RT1(config)#
設定をstartup-configに保存
再設定したパスワードを含む設定を、startup-configに保存します。またcopyコマンドを使うのですが、先ほどとはコピー元とコピー先が逆です。コマンド実行時、『Destination filename [startup-config]? 』とコピー先のファイル名の確認を求められるので、Enterキーを押して先に進みます。
※下の実行例では、exitコマンド実行後にシステムメッセージが表示されて画面が乱れたので、Enterキーを押してコマンドプロンプトを再表示しています。
RT1(config)#exit⏎
RT1#
%SYS-5-CONFIG_I: Configured from console by console
⏎
RT1#copy␣running-config␣startup-config⏎
Destination filename [startup-config]? ⏎
Building configuration...
[OK]
RT1#
startup-configを読み込む設定にして再起動
再びグローバルコンフィギュレーションモードに移行して、コンフィギュレーションレジスタの値を0x2102に変更します。これで次回再起動時にstartup-configを読み込むようになります。
reloadコマンドで再起動します。『System configuration has been modified. Save? [yes/no]:』というのは設定を保存するかどうかの確認ですが、先ほどcopyコマンドで保存済みなのでyesでもnoでも大丈夫です(コンフィギュレーションモードに移行しただけで『modified』と判定するようです)。
※下の実行例では、exitコマンド実行後にシステムメッセージが表示されて画面が乱れたので、Enterキーを押してコマンドプロンプトを再表示しています。
RT1#configure␣terminal⏎
Enter configuration commands, one per line. End with CNTL/Z.
RT1(config)#config-register␣0x2102⏎
RT1(config)#exit⏎
RT1#
%SYS-5-CONFIG_I: Configured from console by console
⏎
RT1#reload⏎
System configuration has been modified. Save? [yes/no]:no⏎
Proceed with reload? [confirm]⏎
再起動したら設定を確認する
再起動したら、再設定したパスワードでログインできるか試してみましょう。
System Bootstrap, Version 12.3(8r)T8, RELEASE SOFTWARE (fc1)
Initializing memory for ECC
..
C1841 processor with 524288 Kbytes of main memory
Main memory is configured to 64 bit mode with ECC enabled
Readonly ROMMON initialized
Self decompressing the image :
########################################################################## [OK]
Restricted Rights Legend
(中略)
Copyright (c) 1986-2007 by Cisco Systems, Inc.
Compiled Wed 18-Jul-07 04:52 by pt_team
Press RETURN to get started!
⏎
User Access Verification
Password: (表示されませんが『cobol⏎』と入力しています)
RT1>enable⏎
Password: (表示されませんが『fortran⏎』と入力しています)
RT1#
修正後のパスワードでログインできました。
次に、最初に設定したインターフェイスのIPアドレスがちゃんと残っているかも確認してみましょう。
RT1#show␣ip␣interface␣brief⏎
Interface IP-Address OK? Method Status Protocol
FastEthernet0/0 192.168.0.1 YES NVRAM administratively down down
FastEthernet0/1 192.168.1.1 YES NVRAM administratively down down
Vlan1 unassigned YES NVRAM administratively down down
RT1#
ちゃんとインターフェイスのIPアドレスが保存されていることが判ります。ただし、インターフェイスはadministratively down状態になってしまっているので、それぞれno shutdownコマンドで有効化する必要があります。
実験の後始末
本当にパスワードリカバリが必要だった実機ならばここでメデタシメデタシで終了ですが、学生実験など共用の機材で実験した場合はパスワードの設定を削除しないと次に使う人の迷惑になってしまいます。設定を削除して工場出荷状態に戻しておきましょう。
設定を初期化するには、eraseコマンドでstarupt-configファイルを削除します。コマンド実行時『Erasing the nvram filesystem will remove all configuration files! Continue? [confirm]』という確認メッセージが表示されるので、Enterキーを押して先に進みます。
RT1#erase␣startup-config⏎
Erasing the nvram filesystem will remove all configuration files! Continue? [confirm]⏎
[OK]
Erase of nvram: complete
%SYS-7-NV_BLOCK_INIT: Initialized the geometry of nvram
RT1#
再起動して設定が初期化された確認しましょう。
RT1#reload⏎
Proceed with reload? [confirm]⏎
System Bootstrap, Version 12.3(8r)T8, RELEASE SOFTWARE (fc1)
Initializing memory for ECC
..
C1841 processor with 524288 Kbytes of main memory
Main memory is configured to 64 bit mode with ECC enabled
Readonly ROMMON initialized
Self decompressing the image :
########################################################################## [OK]
Restricted Rights Legend
(中略)
--- System Configuration Dialog ---
Would you like to enter the initial configuration dialog? [yes/no]:
工場出荷時設定にもどったので、初期設定ダイアログを表示するかを問う『Would you like to enter the initial configuration dialog? [yes/no]: 』というメッセージが表示されています。
まとめ
今回は何度も電源オフ→オンを行ったり、ROMMONを使用するなど、通常とは違う操作が必要になったことに戸惑うことも多かったかもしれませんが、一度流れが判ってしまえばそれほど難しい作業ではありません。
『設定の変更が必要になったタイミングで、管理者が急病で入院してしまった!』など、パスワードリカバリ作業は意図しないタイミングで発生します。万が一の時のために一度体験しておくと、『本番』で慌てずに済むと思います。



コメント