Expect 1.15 で作成されたアクティブな ssh セッションがあります。このセッションでは、第 2 レベルの認証のために次のコマンドを実行します。残念ながら、@ 文字で始まる奇妙なパスワードを使用する必要があります (例 @johndoe)
$exp->send("telnet 10.0.0.1\n");
$exp->expect(
10,
[
qr/login: / => sub {
$exp->send("johndoe\n");
+exp_continue;
}
],
[
qr/assword: / => sub {
$exp->send('@johndoe' . "\n");
+exp_continue;
}
],
[
qr/\[\w+\]\#/ => sub {
print "Success\n";
}
],
[
qr/Login incorrect/ => sub {
print "Login Incorrect\n";
}
]
);
手動で試したところ、ログインに成功したため、資格情報は正しいです。コードを実行すると、常にエラー (ログインが正しくない) になるため、表示されたパスワードではなく別の文字列が送信されると思います。
あまりにも多くの種類の補間と補間された文字列を ascii コードでも試しました。
@ 文字が既に補間された文字列で補間エラーを引き起こす可能性があるかどうかは誰にもわかりますか?
パスワードを変更することはできません。そうしないと、予想されるバグを除外できます。
専門家が私を助けることができますか?ありがとう!
編集。追加されたログ
login:
spawn id(3): Does `telnet 10.0.0.1\r\nTrying 10.0.0.1...\r\nConnected to 10.0.0.1.\r\n\r\nlogin: '
match:
pattern #1: -re `(?-xism:login: )'? YES!!
Before match string: `telnet 10.0.0.1\r\nTrying 10.0.0.1...\r\nConnected to 10.0.0.1.\r\n'
Match string: `login: '
After match string: `'
Matchlist: ()
Calling hook CODE(0x4064e0ac)...
Sending 'johndoe\n' to spawn id(3)
Expect::print('Expect=GLOB(0x405d6920)','johndoe\x{a}') called at my_script.pl line 195
main::__ANON__('Expect=GLOB(0x405d6920)') called at /opt/perl_32/lib/site_perl/5.8.3/Expect.pm line 733
Expect::_multi_expect(10,'undef','ARRAY(0x40653f4c)') called at /opt/perl_32/lib/site_perl/5.8.3/Expect.pm line 536
Expect::expect('Expect=GLOB(0x405d6920)',10,'ARRAY(0x4064e040)','ARRAY(0x40653ea4)','ARRAY(0x405d6c44)','ARRAY(0x40653f04)') called at my_script.pl line 224
Continuing expect, restarting timeout...
spawn id(3): Does `'
match:
pattern #1: -re `(?-xism:login: )'? No.
pattern #2: -re `(?-xism:assword: )'? No.
pattern #3: -re `(?-xism:\[\w+\]\w+\#)'? No.
pattern #4: -re `(?-xism:Login incorrect)'? No.
Waiting for new data (10 seconds)...
spawn id(3): new data.
spawn id(3): read 9 byte(s).
johndoe
spawn id(3): Does `johndoe\r\n'
match:
pattern #1: -re `(?-xism:login: )'? No.
pattern #2: -re `(?-xism:assword: )'? No.
pattern #3: -re `(?-xism:\[\w+\]\w+\#)'? No.
pattern #4: -re `(?-xism:Login incorrect)'? No.
Waiting for new data (10 seconds)...
spawn id(3): new data.
spawn id(3): read 10 byte(s).
Password:
spawn id(3): Does `johndoe\r\nPassword: '
match:
pattern #1: -re `(?-xism:login: )'? No.
pattern #2: -re `(?-xism:assword: )'? YES!!
Before match string: `johndoe\r\nP'
Match string: `assword: '
After match string: `'
Matchlist: ()
Calling hook CODE(0x404b4f44)...
Sending '@johndoe\n' to spawn id(3)
Expect::print('Expect=GLOB(0x405d6920)','@johndoe\x{a}') called at my_script.pl line 205
main::__ANON__('Expect=GLOB(0x405d6920)') called at /opt/perl_32/lib/site_perl/5.8.3/Expect.pm line 733
Expect::_multi_expect(10,'undef','ARRAY(0x40653f4c)') called at /opt/perl_32/lib/site_perl/5.8.3/Expect.pm line 536
Expect::expect('Expect=GLOB(0x405d6920)',10,'ARRAY(0x4064e040)','ARRAY(0x40653ea4)','ARRAY(0x405d6c44)','ARRAY(0x40653f04)') called at my_script.pl line 224
Continuing expect, restarting timeout...
spawn id(3): Does `'
match:
pattern #1: -re `(?-xism:login: )'? No.
pattern #2: -re `(?-xism:assword: )'? No.
pattern #3: -re `(?-xism:\[\w+\]\w+\#)'? No.
pattern #4: -re `(?-xism:Login incorrect)'? No.
Waiting for new data (10 seconds)...
spawn id(3): new data.
spawn id(3): read 2 byte(s).
spawn id(3): Does `\r\n'
match:
pattern #1: -re `(?-xism:login: )'? No.
pattern #2: -re `(?-xism:assword: )'? No.
pattern #3: -re `(?-xism:\[\w+\]\w+\#)'? No.
pattern #4: -re `(?-xism:Login incorrect)'? No.
Waiting for new data (10 seconds)...
spawn id(3): new data.
spawn id(3): read 24 byte(s).
Login incorrect
login:
spawn id(3): Does `\r\nLogin incorrect\r\nlogin: '
match:
pattern #1: -re `(?-xism:login: )'? YES!!
Before match string: `\r\nLogin incorrect\r\n'
Match string: `login: '
After match string: `'
Matchlist: ()