先日、職場のメールサーバのアカウントを作り直すことになりました。
作るべきアカウントは全部で3千人。期限は2日後。
メールサーバの OS は SunOS です。
基本的な流れとしては、
1. useradd でユーザアカウント追加
2. passwd でパスワード設定
3. aliases 書き換え後、newaliases
となるのですが、これを3千回人力でやるのはもっとも避けたい方法です。ていうか間に合いません。
一括で大量のユーザアカウントを登録する、なんてことはそれなりの組織ならよくあることでしょうから、きっとそういう手段が用意されているに違いないと思って Web 検索大会。
・・・1時間ほど探しまくりましたが、どうやら楽ちんな方法は無いようです。
HDE Controller のような商用管理ツールを使えば一括登録できるようですが、そんなものはありません。それから、どうやら Linux ならテキストファイルにあらかじめアカウント情報を記入しておいて、その内容で一括登録するツールがあるようですが、残念ながら Sun です。
それならば、自動化するシェルスクリプトなり perl スクリプトなりを書こう。そう思ったのもつかの間、大問題にぶち当たりました。
useradd コマンドは、ユーザ名などの設定項目をすべてコマンドラインオプションとして渡すことができ、1アカウントに対しコマンド一発で設定できます。これは問題ありません。全ユーザのデータは Excel のシートで持っているので、concatenate() を使って全ユーザ分の useradd コマンド行を生成しました。
しかし、SunOS の passwd コマンドは対話モードしかないのです。いちいちプロンプトにパスワードを入力しないといけない仕組みです。しかも確認の為にもう一度入力しないといけないので1アカウントあたり2回。これはスクリプトから呼び出すには使いにくすぎます。
途方に暮れた私。大学時代の先輩であり、私の計算機人生における師匠でもあるお方に5年ぶりくらいに電話して助けを乞うと、
open(FP,"| passwd $username");
の様にパイプを開くと Linux ではうまく入力できるとのアドバイスを頂きました。さっそく試してみましたが・・・失敗。パイプ越しの入力は受け取ってくれずプロンプトが出てしまいます。
ここで、perl での自動設定は完全に暗礁に乗り上げました。お手上げです。もうあきらめて帰ろうかと思いましたが、ここで、メールサーバへのログインに使っている TeraTermPro のキーマクロを利用することを思いつきました。
TeraTermPro のキーマクロは、通信の確立手順などを自動化することを想定しているので、たとえばログインプロンプトの "login:" などといった文字列が来た時点で文字列を送信することができる様になっています。
つまり、passwd コマンドを発行してパスワード入力プロンプトを待ち、プロンプトが出たらパスワードを入力することは簡単にできてしまいます。なんだ、解決した。
というわけで、3千アカウント分のパスワードを設定するキーマクロをこれまた Excel で生成して実行。なお、プロンプトを読むタイミングを確実にするためにウェイトを1秒入れた都合上、1アカウントあたり約2秒、全部で 6,000 秒程度を要する計算でしたので、キーマクロをスタートさせてそのまま帰りました。実際には3時間ちょっとかかった様です。
aliases はテキストファイルを用意して newaliases を一回実行するだけなので簡単。どうにか間に合わせることが出来ました。一時はどうなることかと思いました・・・。
最近のコメント
k on W-ZERO3 [es] の音質について: 004SHですが変化
QLO on Muramasa のその後: > 古賀さま おそく
古賀 靖 on Muramasa のその後: くろぶろぐさんはじめ
QLO on RSS Concatenater by Yahoo! Pipes: RSS Concat
あやね on 最長不倒: すごいペースですね。
QLO on ドコモ休止: » YK
YKK on ドコモ休止: なるほど~参考になり
QLO on ドコモ休止: 3年以内にドコモに復
あやね on ドコモ休止: いちねん割引にひっか