Linuxのシェルスクリプトを使用し、NEC IX2215にTelnetでログインしてPPPoEのIPアドレスを取得したい。
インターネットで調べ、その通りにやってみても、自分の環境では動かなかったため、試行錯誤しました。
その時のメモを残しておきます。
■環境
CentOS 8.5
トラブルシュート
改行が送信されない
インターネットで調べ、以下のようなスクリプトを準備しました。
#!/bin/sh ( sleep 1; echo username;sleep 1; echo password;sleep 1; echo enable-config;sleep 1; echo terminal length 0;sleep 1; echo show ppp GigaEthernet0.1;sleep 3; echo exit;sleep 1; echo exit ) | telnet 192.168.0.254 >> pppoe.log
実行してみると、改行されず、長い文字列が打たれ続けるだけでした。
Trying 192.168.0.254... Connected to 192.168.0.254. Escape character is '^]'. login: usernamepasswordenable-configterminal length 0show ppp GigaEthernet0.1exit
tcpdumpをして見ると、CRが送信されていませんでした。
echo に -e を付け、\rを書く事で、CRが送信されるとのこと。
ログインできない
前述のスクリプトに改良を加え、以下を実行してみました。
#!/bin/sh ( sleep 1; echo -e "username\r";sleep 1; echo -e "password\r";sleep 1; echo -e "enable-config\r";sleep 1; echo -e "terminal length 0\r";sleep 1; echo -e "show ppp GigaEthernet0.1\r";sleep 3; echo -e "exit\r";sleep 1; echo -e "exit\r" ) | telnet 192.168.0.254 >> pppoe.log
今度は、ユーザ名かパスワードが間違っている場合のエラーが表示され、ログインできませんでした。
Trying 192.168.0.254... Connected to 192.168.0.254. Escape character is '^]'. login: username Password: Login attempt failed. login: enable-config Password: Login attempt failed. login: show ppp GigaEthernet0.1 Password: Login attempt failed.
tcpdumpをしてみると、無駄なLFが送信され、失敗していました。
echo に -n を付けると、改行文字LFが付かなくなるそうです。
最終的に
以下のスクリプトで、無事にログインし、ログを取得できるようになりました。
#!/bin/sh ( sleep 1; echo -n -e "username\r";sleep 1; echo -n -e "password\r";sleep 1; echo -n -e "enable-config\r";sleep 1; echo -n -e "terminal length 0\r";sleep 1; echo -n -e "show ppp GigaEthernet0.1\r";sleep 3; echo -n -e "exit\r";sleep 1; echo -n -e "exit\r" ) | telnet 192.168.0.254 >> pppoe.log
これは、色々な処理に活用出来そうです。