0

perl telnet を介して bash するようにリモート サーバー シェルを設定するにはどうすればよいですか?

私のコードは以下の通りです:

$telnet = Net::Telnet->new(Timeout=>90,Errmode=>'die');
$telnet->open($ipAddress);
$telnet->login($username,$password);
$telnet->waitfor('/$/');
$telnet->print("exec bash");
print "after bash";
print $telnet->cmd("ls -lrt");
print $telnet->cmd("cd $homePath");

上記のコードでは、exec bash ステートメントの後、どのコマンドも実行されていません。この行の後に実行する必要があるプロセスの一部には環境設定が必要なため、リモート シェルを bash として設定する必要があります。

どうすれば同じことができるか教えてください。

4

1 に答える 1

0

コマンドプロンプトを待つ正規表現が間違っています

$telnet->waitfor('/$/');

試す

$telnet->waitfor('/\$ $/');

さらに良いことに、Net::Telnet 3.04 doc の最初の例を参照してください。

my $host = 'your_destination_host_here';
my $user = 'your_username_here';
my $passwd = 'your_password_here';
my ($t, @output);

## Create a Net::Telnet object.
use Net::Telnet ();
$t = new Net::Telnet (Timeout  => 10);

## Connect and login.
$t->open($host);

$t->waitfor('/login: ?$/i');
$t->print($user);

$t->waitfor('/password: ?$/i');
$t->print($passwd);

## Switch to a known shell, using a known prompt.
$t->prompt('/<xPROMPTx> $/');
$t->errmode("return");

$t->cmd("exec /usr/bin/env 'PS1=<xPROMPTx> ' /bin/sh -i")
    or die "login failed to remote host $host";

$t->errmode("die");

## Now you can do cmd() to your heart's content.
@output = $t->cmd("uname -a");
print @output;
于 2013-06-24T15:13:29.147 に答える