KUSONEKOの見る世界

シェルスクリプトでTelnetしてNW機器からログを取得する

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

これは、色々な処理に活用出来そうです。