システム奮闘記:その41
シリアルコンソールからLinuxへログイン
(2005年7月1日に掲載)
はじめに
  RS232Cケーブルを使って、WindowsのハイパーターミナルからLinuxへの
ログインが可能なのだ。
  そこで今回は、その話を書く事にしました。
  実は、最初からシリアルを使ってログインを考えていたわけではなかった。
  NICが壊れた時、Windows同士でデータのやりとりを行う場合に、
シリアルを使ってデータ転送ができないかと考えたのがキッカケだった。
  まずは、キッカケになった話を書く事にします。
  通常、パソコン同士でデータのやりとりを行う場合は、LANケーブルを使う。
| パソコン同士でデータのやりとり | 
  | 
| 
LANのクロスケーブルを使い、データのやりとりを行う。
 | 
  だが、NICが壊れると、LANケーブルが使えなくなる。
  普段なら対応策なんぞ考えないものだ。
RS232Cケーブルを使ってWindows同士での通信
  だが、2005年5月に事件が起こった。
  営業所のパソコンが通信ができなくなった!!
  NICが壊れているため、ネットワークを使って、他のパソコンへデータの転送が
全くできない。
  そこでデータの吸い出しを考えるのだが、フロッピーディスクの場合だと
1.4Mしかデータが入らないため、大量データのコピーには向いていない。
  賢い方法は、USBフラッシュメモリを使う事だ。
  数千円あれば、256Mのデータを入れられる物が手に入る。
  しかし、私は、RS232Cクロスケーブルを使ってデータ転送を行う事をしてみた。
  なぜ、そんな事を行ったのか。
  USBフラッシュメモリは1、2万円する物だと思い込んでいた (--;;
  稟議を上げる必要があるので手間がかかる。
  そこで、USBフラッシュメモリを使わずに、何か方法がないか考えた結果が
RS232Cケーブルを使ったデータ転送だった。
  幸い、RS232Cケーブルは、ストレートもクロスも社内にある。
  ヤマハのルーター(RTX1000)を操作するために購入した際、
ストレートとクロスを知らずに電機屋さんへ行き、両方ある事を知り
どっちを使えば良いのか迷い、両方購入したからだ。
  「システム奮闘記:その35」(インターネットVPN導入)をご覧ください。
 
  だが、googleを使っても、データ転送の方法が見つからない。
  そこで友人Y君に電話をかけて聞く事にした。
  すると・・・
 RS232Cのクロスなら可能だけど、方法忘れた
 だった。
  でも、ヒントは得られた。
  Windows98同士でRS232Cクロスケーブルを使って通信を行う事を考えた。
| パソコン同士でデータのやりとり | 
  | 
RS232Cのクロスケーブルを使い、データのやりとりを行う。
  | 
  そこで勘を働かせる。
  「通信」の「ハイパーターミナル」を使えばできるでのはないかと考えた。
| 設定方法:その1 | 
  | 
| 設定方法:その2 | 
  | 
| 
接続方法は「COM1へダイレクト」を選択する。
 | 
| 設定方法:その3 | 
  | 
通信速度は、115200bpsが最高速度です。 
これ以上、速度を上げてもエラーがでるだけです。
 | 
  ちなみに、速度を上げ過ぎたために発生するエラーは以下の通りです。
| エラー内容 | 
  | 
  早速、データを送ってみる事にする。
| データの転送(相手にデータを送る) | 
  | 
| 
「転送(T)」の「ファイルの送信(S)」を選ぶ
 | 
  そして、データ送信するファイルとプロトコルを決める。
| ファイルの選択 | 
  | 
転送するファイルを、フォルダーを選択する。 
プロトコルはデフォルトの「Zmodem」のままにしておく。
 | 
  | 
| 
これで準備はOKなので、「送信(S)」を押す。
 | 
  データ送信の画面が出てきたと思ったのだが・・・
| データ送信に失敗の画面 | 
  | 
| 
何も表示されていない事がわかる。
 | 
  全然、データが転送されてへん (TT)
  なぜ、転送されないのか考える。ふと思いつく。
  データを送る側だけでなく、受信側もハイパーターミナルを
立ち上げる必要があるのでは?
  そこで、受信側でもハイパーターミナルを立ち上げてみる事にした。
  すると・・・
| データ送信中の画面 | 
  | 
| 
データが転送されている様子です。
 | 
  見事、データ転送に成功!
  これで、NICが壊れていても、Windows同士でのデータのやりとりが可能になった。
  通信プロトコルですが、今回は「Zmodem」を使いました。
  特に、「Zmodem」にこだわったわけではありません。
  単に、デフォルトの設定だけです (^^;;
  もちろん、両方の通信プロトコルを一致させる必要はあります。
  片方が「Zmodem」で片方が「kermit」などの別のプロトコルになっていますと
通信ができませんので。
  ところでハイパーターミナルを使ったデータ転送に実用性があるか、
データの転送時間を測定する事にした。
  もちろん、ハードディスクへの書き込み速度などの影響もあるため、
一概に「これだけ時間がかかる」と断言する事はできないのだが、
参考までに書きますと
| データ転送時間(1.35Mバイトのデータの場合) | 
| プロトコル | 
時間 | 
| Zmodem | 
2分 | 
| kermit | 
4分 | 
  この結果を見る限りでは、あまり有効な手とは思えない・・・。
  フラッシュメモリやCD-Rがあれば、もっと簡単な話ですが、
データのコピーの方法の一つとして知っておくのも無駄ではないと思った。
  NICが壊れた営業所のパソコンだが、NICをつけかえる事で対応できた。
  幸いRS232Cケーブルの活用はなかった。
RS232CケーブルでWindowsからLinuxに接続
  しばらく経った後、ふと思った。
  もし、LinuxでNICが壊れた場合、どうすれば良いのか?
  そこで、WindowsとLinuxとの間で、RS232Cケーブルを使って、
データのやりとりができないかと考えてみた。
| ふと、私が思った事 | 
  | 
  調べてみても、なかなか見つからない。諦めかけた時、次のサイトを発見した。
  Linuxサーバーをシリアルコンソールから管理する
  そのサイトには、シリアルを使って、コンソールからLinuxを操作する
具体的な設定方法が掲載されていた。
| シリアルコンソールを使ってログインできる | 
  | 
  ふと思った。難しいソフトでなく、Windowsの付属ののハイパーテキストで
Linuxへ接続できるのではと思った。
  そこで、ホームページに書かれている内容を見ながら、私のお得意の
「設定内容の意味を理解せずに丸写し」を行う事にした。
| /etc/inittabファイルに次の内容を追加 | 
#serial
co:2345:respawn:/sbin/agetty -h 115200 ttyS0 vt100
  | 
| 
通信速度は115200bpsまで可能です
 | 
  私はブートローダとして「LILO」を使っているので、/etc/lilo.confの
設定も追加した。
| /etc/lilo.confの追加 | 
prompt
timeout=50
default=linux
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
#message=/boot/message
append="console=tty0 console=ttyS0,115200"
lba32
image=/boot/vmlinuz-2.4.31
        label=linux
        read-only
        root=/dev/hda2
image=/boot/vmlinuz-2.4.18-3
        label=linux-old
        initrd=/boot/initrd-2.4.18-3.img
        read-only
        root=/dev/hda2
 | 
赤い部分は命令を無効化した場所です。 
青い部分は追加した箇所です。
 | 
  これでLinux側の設定は完了。
  変更した内容で動かすため、再起動をした。
  次に、Windows側の設定です。
| Windows側の設定(ハイパーターミナル) | 
  | 
| Windows側の設定(ハイパーターミナル) | 
  | 
| Windows側の設定(ハイパーターミナル) | 
  | 
| 
通信速度は、115200bpsまで可能です。
 | 
  Windows同士のデータ転送と設定は全く同じだ。
  そして、ハイパーターミナルからLinuxへ接続を行ってみた。
  すると・・・
  見事に、ログイン画面が出てきた!!
| ログイン画面 | 
  | 
  RS232Cケーブルを使って、シリアルから接続できたのだ!!
  早速、ログインをしてみる。
| Linuxを操作する様子 | 
  | 
  ハイパーターミナルを使ってのログイン。
  シリアルコンソールからだと、初期設定ではrootでログインはできないのだが、
簡単な設定変更で、rootでログインする事も可能だ。
  /etc/securettyファイルに「ttyS0」を追加すれば良いのだ。
| /etc/securettyファイルに「ttyS0」を追加 | 
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
vc/9
vc/10
vc/11
tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
tty9
tty10
tty11
ttyS0
  | 
rootでログインできるコンソール(端末)を表すファイルだ。 
シリアルのコンソールを追加する事で、rootでのログインを可能にする。
 | 
  そして、実際に、rootでログインしてみると・・・
| rootでログイン成功 | 
  | 
  見事に成功 (^^)V
LinuxとWindows間でのデータ転送が可能か
  ところで当初の目的だった「Windows←→Linux」との間での
データ転送ができないのだろうか。
| 当初の目的 | 
  | 
  そこで、ふと思いついた。Windows同士のデータ転送を行った方法を使えば
Windows側からLinuxへデータ転送ができるのではないか?
| 私が思いついた事 | 
  | 
  そう考えた私は、早速、実行してみる事にした。
| Linuxへデータ転送を行なってみた | 
  | 
この時、データ送信の方法は、Windows同士でのデータ通信と同様の 
操作方法を行なった。
 | 
  この時、プロトコルは意識しなかった。
  何も考えずに、デフォルトの「Zmodem」を使った (^^;;
| 送信ファイルの選択 | 
  | 
| 
Windows同士のデータ転送を同じ事を行ってみた
 | 
  転送するデータは、テキストファイルだ。
| テキストファイル(testfile.txt)の中身 | 
| 
test file
 | 
  データ転送後、正しくテキストファイルが送られている事が確認できれば
実験は成功だ。
  データは無事、送られた。そしてファイルを閲覧してみると・・・
| Linuxへデータ転送を行なった結果、成功した | 
  | 
  見事に成功 (^^)V
  なんだか気味が悪いほど、うまくいく。
  ちなみに、実験で送ったテキストファイルの大きさは小さいので、
転送中の様子が一瞬で消えてしまうため、お見せする事ができない。
  そこで、別の大きなファイルを送っている様子を、お見せします。
| データ転送中の様子 | 
  | 
  もちろん、テキストデータだけでなく、バイナリーデータも
送信しましたが、問題なく送信できました (^^)V
LinuxからWindowsへのデータ転送
  何事もうまくいくと、すぐに調子に乗る私 (^^)
 
 Linux側からWindowsへのデータ転送も可能だろう!
 と思った。
| LinuxからWindowsのデータ転送も可能だろうと思った | 
  | 
  早速、データ受信を行ってみる事にした。
| LinuxからWindowsへデータ転送 | 
  | 
| 
Windows側から接続しているため、ここでは「受信」を選ぶ。
 | 
  そして、Windowsにデータを落とし込む先を指定する。
| データの受信先のフォルダーの指定 | 
  | 
  Linux側からシリアルポートへデータを流し込むために、
 cat ファイル名 > /dev/ttyS0
 をやってみたが・・・
| データ転送中の様子 | 
  | 
| 
全く反応がない。うまく転送できていないようだ。
 | 
  反応があらへん・・・  (--;;
  しばらく様子を見てみると
| エラーが発生した | 
  | 
  タイムアウトが出てもうた (TT)
  往生際の悪さは天下一品の私は、諦め悪く、google先生を使って
情報を探すのだが・・・
  全く見つからへん (TT)
  格好良く有終の美を飾るために、LinuxからWindowsへデータを送るのを
成功させたい。
  そう、思いっきり見栄を張り、格好つけてみたいのらー!!
  だが、いくら情報を探しても見つからない。
  あきらめかけた時、minicomというコマンドを発見した。
  このコマンドは、RedHat7.3では、初期設定で入っていた。
  藁をもすがる気持ちで、このソフトを動かしてみた。
| minicomを動かしてみる事にした | 
  | 
minicom -sコマンドで上の設定画面が出てくる。 
ここで各種設定を行う。通常、rootしか使えないが 
あるファイルを触ると、一般ユーザーでも使えるようになるみたい。
 | 
| minicomを動かしてみる事にした | 
  | 
デバイスをシリアルポートの「ttyS0」に変更した。 
あと、通信プロトコルはデフォルトで「Zmodem」になっていたので 
何も変更は行わなかった。
 | 
  そして、minicomを実行させた。
  すると以下の画面が出てきた。
| minicomを動かしてみる事にした | 
  | 
この時、なぜか「CTRL」+「A」を押しても何のキーを教えても反応がなかった。 
今にして思えば謎だ・・・ (^^;;
 | 
  ふと、Windows側の画面を見てみると・・・
  Linux側で適当に打った文字が表示されている。
| Linux側での表示画面 | 
  | 
minicomで適当に打った文字がコンソールに表示されている。 
丁度、ピンクの線を引いている所だ。
 | 
  うぬぬぬ・・・
  それでも「有終の美」にこだわる私は往生際悪く、今度は、minicomを使って
Linux同士の通信を試みてみた。
Linux同士の通信
 RS232Cケーブルを使ってLinux同士での通信が可能かどうか
試してみる事にした。
| minicomでLinux同士の通信を試みてみた | 
  | 
  これならデータのやりとりが可能だろうと考えた。
  そこで双方のLinuxマシンで、minicomを立ち上げる。
| データ送信の「S」を選択する | 
  | 
| 
データ送信の「S」を選択する。
 | 
| 通信プロトコルの設定 | 
  | 
| 
通信プロトコルとして「Zmodem」を選択する。
 | 
| 送信ファイル名の選択 | 
  | 
| 
送信したいファイルを選択する。
 | 
| 送信したいファイルを選択した様子 | 
  | 
| データ送信中の様子 | 
  | 
  データ送信の結果は・・・
  見事成功! (^^)V
  これで「有終の美」を飾って終わる事ができる。
  他のデータの転送も行ってみる事にした。
  だが・・・
| 再度、データ送信をやってみると・・・ | 
  | 
| 
データ送信に失敗した様子。
 | 
  なんで失敗するねん (TT)
  なぜデータ送信が失敗したのか、わからない。
  もう一度、挑戦しても・・・
  やっぱりアカン (TT)
  私のお家芸になってしまったいわゆる「ドツボにハマった」
  その後、何度やっても失敗する。
  単に失敗ならまだしも、データ送信中、相手先のLinuxマシンは
データの待ち受け画面になるんだが、それすら反応しない場合も出てきた。
  もう何がなんだかわからない・・・
  なぜ、一度だけデータ送信に成功したのか。
  そして、その後は失敗ばかりしたのか原因がわからない。
  手がかりに何もない。いくら往生際の悪い私でも、技術や知識がないと、
手も足もでない。万策尽きた感じだった。
  技術力がつくまで保留にする事に決めた。
  「諦めるな」という声があるかもしれませんが、それには反論します。
  だって、事務員だもーん。わかんなーい (^^)V
  ふぅ、最後の決め台詞で逃げきった ← おい (^^;;
まとめ
  さて、ハイパーターミナルを使ってLinuxへの接続。
  一体、何のメリットがあるのだろうか。単に技術的なお遊びなのだろうか。
  そこで、利点を調べてみる事にした。
  すると以下の利点がある事がわかった。
| シリアルコンソールを使う利点 | 
| (1) | 
モニターやキーボードを一式揃えなくても本体だけあれば
あとは1台だけのパソコンを使い、RS232Cケーブルで各サーバーと
パソコンとを接続できるため、何台ものサーバーを用意する場合、
場所をとらない。ラックマウントに便利。
  | 
| (2) | 
組み込み系の場合、キーボードもマウスもないので、
ハイパーターミナルからシリアルを使っての接続する必要がある。
もちろん、NICがなくてもデータを送る事ができるので、
組み込み系の開発には便利
  | 
  私のような中小企業の事務員が、大量のサーバーを管理する事はないし、
ましてや、ただの事務員が組み込み系に手を出す事もありえない。
  だが、こんな事ができるのだという事で、知識として知っておくのは
無駄ではないと思った (^^)
次章:「WindowsXPが匿名ログオンできない」を読む
前章:「クライアント(WindowsXP)のパケットフィルタリング」を読む
目次:システム奮闘記に戻る