用perl实现交互远程登陆问题?

用perl实现交互远程登陆问题?

因为有很多机器要统一管理,现在想用perl实现批量登陆远程服务器,小弟刚学perl,脚本如下:

#!/usr/bin/perl -w

use strict ;
use warnings;
use Net::SSH::Expect;

&ssh_test("11.11.11.11","22","abc","abc") ;

sub  ssh_test() {
    my ($host,$port,$user,$pass) = @_ ;

    my $ssh = Net::SSH::Expect->new (
                                    host => $host,
                                    port => $port,
                                    password=> $pass,
                                    user => $user,
                                    no_terminal =>0,
                                    raw_pty => 1,
                                    timeout =>2,
                                    );



    my $login_output = $ssh->login();
        if ($login_output !~ /from/) {
            die "Login has failed. Login output was $login_output";
        }


    $ssh->send("su - root");
    $ssh->waitfor('Password:\s*\z', 3) or die "prompt 'Password' not found after 1 second";
    $ssh->send("root");

    my $who = $ssh->exec("who");
    print ($who);

    my $ls = $ssh->exec("ls");
    print($ls);

    $ssh->close();
}


但是在执行该段代码的时候,提示密码不对,如下:

[root@mail chentao]# ./net_ssh_expect.pl

su: incorrect password

可是密码是正确的,请兄弟们帮小弟看看,谢谢!

还有一个疑问,比如要同时登陆到3台服务器上面,abc切换为root后,出现3个ssh窗口?

这个是以前用Expect调用命令行的脚本,以前直接用perl的SSH,SFTP模块,效率很成问题。传输速度和直接调用sftp命令差很多,可能还是Perl做些加解密会差很多

[Copy to clipboard] [ - ]
CODE:
#! /usr/bin/perl
use strict;
use warnings;
use Expect;
my ($host,$user,$pwd,$remote_path,$file_name,$local_path) = @ARGV;

my $timeout = 10;

chdir($local_path);

my $conn = Expect->new;
$conn->raw_pty(1);
#$conn->log_user(0);
#$conn->debug(3);
$conn->spawn("sftp $user\@$host") or die "spawn failed\n";

$conn->expect($timeout, "password:")
      or die "Password not requested as expected";

$conn->send("$pwd\n");
$conn->expect($timeout, "sftp>")
      or die "not see sftp tip for get\n";
$conn->send("get $file_name\n");

$conn->expect(86400,"sftp>")
      or die "not see sftp tip for exit\n";
$conn->send("exit\n");
$conn->soft_close();

谢谢2楼的兄弟,虽然自己搞定了,但是你的帮助让我感激