VirtualBox上でNEXTSTEP 3.3Jを味わい直す(その3)
リモートログイン
NEXTSTEPから外部のホストにログインするには telnetと rsh くらいしか手段が無いが、いまどきの環境では、接続することができない。 さりとて、NEXTSTEPで使え、最近のプロトコルに対応したSSHも(私の知る限り)存在しないので、近代的なマシンに中継してもらうのが良さそうである。
LinuxやmacOSをホストOSとするVirtualBoxを想定すると、NEXTSTEPからtelnetでホストにログインし、そこからsshなどを使えるように、 ホストOS(Unix系)用の簡易型telnetサーバーを制作することにした。
わざわざそんなことをしなくても、既存のtelnetdをインストールすれば良さそうなものであるが、どうせ同じマシンの上で動かすのだから、認証(ログイン)の必要もないし、 できるだけ簡単な仕掛けのほうが好都合である。 ただ、いまやほとんどの環境ではUTF-8が使われている中で、NEXTSTEPはEUC-JPなので、telnetサーバーでその違いを吸収してあげれば便利そうだ。
そこでChatGPTに雛形を作るように命じたが、当初、Pythonを使うように指示してしまったため、思い通りに動かないところがたくさん出てきて、 その問題点を直そうとすると、どんどんと深みにはまり、あるところを直せば、他がおかしくなり、他を直せば、元のところが変になる・・・、といった ループに陥ってしまった。 ChatGPTは、自分が生成したコードであっても、そんなに昔のことは覚えていないようである。
そこでCを使った原始的なソケットプログラミングで実装するよう指示したところ、細かい調整は必要だったものの、割合と簡単に期待に近い動作をするコードを生成してくれた。 おそらく、ネット上には、類似のCのコードの断片が、Pythonのそれよりはるかに多く、存在しているのだろう。
デバッグの最中に、ChatGPTが、ああしろ、こうしろ、と「提案」してくるのは、機械にこき使われているようで、何となく腹立たしい。 こちらが不具合箇所を見つけたのに、『よくあるハマりポイントなので、今回バッチリ対応できたのは素晴らしいです!』などと言われるのもはなはだ不愉快だ。 分かっているなら、最初から指摘して欲しいものだ。
簡易telnetサーバー
そのような次第で、だいたいChatGPTに書いてもらったのが、簡易telnetサーバー telnetd.c である。 仮想環境で古いOSを使っておられる方はお試しあれ。
⚠️ このサーバーは同一マシン内での利用を想定しており、認証機構は実装されていません。 外部からのアクセスを防ぐため、ファイアウォールやネットワーク設定を適切に行なってください。 あくまで自己責任でご利用ください。
セットアップ
まず、telnetd.cをダウンロードし、冒頭付近にある以下の行を編集しておく。
const char *allowed_ips[] = { "127.0.0.1", "192.168.1.2", NULL };
ゲストOSのIPアドレスをこのリストに追加すること。 (NATネットワークの場合、ゲスト側から見たホストのIPアドレスは自分自身となる。)
ビルド
$ cc -o telnetd telnetd.c
環境によっては、iconvライブラリを追加する必要がある。
$ cc -o telnetd telnetd.c -liconv
サーバーの実行
文字コード変換(UTF-8 <--> EUC-JP)を有効にする場合:
$ ./telnetd -j
文字コード変換を行わない場合:
$ ./telnetd
NEXTSTEPからの接続
NEXTSTEP上では、以下のように実行すること。
$ telnet host-ip-address 2323
接続後、表示の乱れを避けるために端末タイプを設定すること。
$ TERM=vt100
お役立ち情報
- TelnetD: VirtualBoxクライアント用のTelnetサーバー