Net::Telnetモジュールを使って会社のサーバに仕事をさせるスクリプトを書いていたら、
以前ログインできてたのに、サーバリプレース以後ログインできなくなった。
結構ハマってしまって放置していたのだが、今日ようやくFixできてスッキリ。
Net::Telnetでの通信のやりとりは、dump_log()メソッドでファイルに記録できるのね。
# ホストに接続する
$telnet->open( $hostname );
# loginと出力されたらユーザ名を送信
$telnet->waitfor('/login/i');
$telnet->print( $username );
# passwordと出力されたらパスワードを送信
$telnet->waitfor('/password/i');
$telnet->print( $password );
# ターミナルタイプ設定
$telnet->waitfor('/terminal type? /');
$telnet->print( 'vt100' );
# プロンプトが出力されるまで待つ
$telnet->waitfor( $prompt );
上記太字部分がミソで、こいつを指定してやらないと、ログインプロンプトが返ってこない環境があるらしい。
これを設定してやらないと、
unknown terminal type network Terminal type?
とか言われるので、.bash_profileに'export TERM=vt100'とか書いてあげたりしないといけない(そこで入力待ち状態なのでプロンプトを待ってるwaitfor()がタイムアウトする)。
ようやくFixしたので、これを使ってリリース作業の自動化とかできたら楽だな~とか妄想中。(笑


コメントする