シェルスクリプトでtelnet自動操作
telnetでログインして何か実行した結果をテキストに保存して情報収集したり、複数のサーバにログインして同じコマンドをひたすら入力したりするのはつらいものです。操作端末がWindowsでTeratermが使える環境ならマクロでどうとでも出来るのですが、UNIXのコンソール環境でどうにかしなければいけなかったり、cronで裏で粛々と動いて欲しい時は困ってしまいます。
そんな事があってperlを頑張って勉強してNet::telnetとか使って無理矢理実現させていたんですが、某氏からこんなやり方を教えてもらい、あまりの簡単さにちびりそうになりました。というかちびりました。
telnet接続後の入力文字列をechoで羅列。タイミングはsleepで調整。
cmds.sh
#!/bin/sh sleep 1; echo user-name sleep 1; echo password sleep 5; echo ls -al sleep 1; echo exit
で、このスクリプトの後にパイプでtelnetを繋いで実行。(勿論これもスクリプトにしても問題ない)
sh ./cmds.sh | telnet 192.168.0.1 >> auto-telnet.log
これだけです…か簡単過ぎる…っ!!
小難しい事考えて頑張るのは実は簡単で、仕組みを知った上で柔軟に実現させる事が真に難しい。