UNIX的なアレ

UNIX的なこととかいろいろ

TeraTermで複数のマシンに公開鍵を配る方法

用途ごとに分けたターミナルの選び方 - UNIX的なアレ
でも書きましたが、複数のサーバーにsshの公開鍵を配るようなときはパスワードを自動入力させるようなスクリプトが便利です。
似たようなことができる言語で、expectがありますが自分はTeraTermマクロを利用するケースが多いです。

そんなときに書いた簡単なTeraTermマクロを紹介します。

sendln 'for i in `cat ~/serverlist` ; do ssh-copy-id $i ; done'
:loop
wait '(yes/no)?' 'password:' 'Password:'
if result=1 sendln 'yes'        # (yes/no)? と聞かれたときにyesと入力させる
if result=2 sendln '********'   # password: と聞かれたときに自分のパスワードを入力させる
if result=3 sendln '********'   # Password: と聞かれたときに自分のパスワードを入力させる
goto loop

ものすごくシンプルなスクリプトです。
上記はbash前提で書いていますので、forで作成したserverlistというファイルを元に、そのサーバーに対してssh-copy-idをしているだけです。
ポイントはその下の、waitと記載してある場所でここで任意に入力をさせたい文字列を書きます。
実際は正規表現も書くことは可能なので、もっと簡単に書くことはできます。

で、その下のresult=1からはwaitで書いた文字列に対応して入力させたい文字列を書きます。
最後はそれをループさせてるだけになります。

これを下記の図を参考にしてTeraTermに直接読ませてください。

まぁ実際のところはこのScriptを自分のローカルPCにパスワードを平文で書いたものを保存するという気持ち悪い作業が発生するのですが、数百台という単位になると圧倒的に威力を増します。
単発系ですが、なかなか便利なマクロです。