0

如何通过 perl telnet 将远程服务器 shell 设置为 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 语句之后,没有任何命令被执行。我需要将远程 shell 设置为 bash,因为在此行之后我需要运行的某些进程需要 env 设置。

请让我知道我该怎么做。

4

1 回答 1

0

您等待命令提示符的正则表达式是错误的

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

尝试

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

更好的是,请参阅 Net::Telnet 3.04 文档中的第一个示例:

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 回答