0

スイッチに telnet するための perl コードを書き込んで、コマンドを実行しようとしています。ここにコードがあります

 my $device = "1.2.3.4";

 my $session = Net::Telnet->new(Host => "$device",
Input_log => "switchevi.log",
    );
$session->login('', 'intosh123');

# Execute a command
my @output = $session->cmd('show run');
print "@output\n";
$session->close;

スイッチにはユーザー名がありません。ログインするとすぐに、パスワードプロンプトが表示されます。

このスクリプトを実行すると、次のようなエラーが表示されます

timed-out waiting for login prompt at switch.pl line 12

この行はどれですか

$session->login('', 'intosh123');

何が起こっているのか教えてください。

4

1 に答える 1

0

ログイン方法に関するcpanドキュメントから:

このメソッドは、ログイン プロンプトを待って $username で応答し、パスワード プロンプトを待って $password で応答し、コマンド インタープリター プロンプトを待つことで、標準ログインを実行します。リモート側から送信されたこれらのプロンプトのいずれかが予期したものと一致しない場合、タイムアウトがオフになっていない限り、このメソッドはタイムアウトします。
...
たとえば、リモート ホストがユーザー名の入力を求めないなど、必要な処理が行われない場合は、このメソッドの代わりに print() と waitfor() の組み合わせを使用することを検討してください。

の代わりに、このようなものを試してください$session->login('', 'intosh123');

$t->waitfor('/password: ?$/i'); #here goes regex to match your password propmt
$t->print($passwd);

また、適切なデフォルトのプロンプト正規表現を設定することを忘れないでください:

my $t = Net::Telnet->new(Timeout => 10,
                      Prompt => '/your regex goes here/');

何か問題が発生した場合はデバッグオプションを使用してください

于 2013-10-25T07:15:01.173 に答える