Thread Problem mit Net::SSH::Perl (16 answers)
Opened by tecker at 2008-10-22 17:30

tecker
 2008-11-24 16:43
#116570 #116570
User since
2008-02-26
77 Artikel
BenutzerIn
[Homepage] [default_avatar]
Muss den Beitrag mal wieder hervor holen, da das Thema wieder aktuell für mich ist. Die Frage bezieht sich im Grunde auf meinen anderen Beitrag von heute (http://board.perl-community.de/thread/12812/#MSG2)

Ich arbeite mit Net::SSH::Perl, was auch inzwischen funktioniert. Geht darum User-Passwörter skriptgesteuert per SSH und passwd-Befehl zu ändern (nicht interaktiv). Soll also hintereinander durchlaufen. Funktioniert ohne Probleme bei Debian-Hosts.

Solaris Hosts mögen es wohl nicht, wenn man passwd per ssh aufruft, es sei denn man erzwingt eine pseudo TTY.

Code: (dl )
ssh USER@SOLARISHOST passwd
geht nicht.


Code: (dl )
ssh -t USER@SOLARISHOST passwd
geht.

Nun meine Frage .... wie kann ich das im Skript umsetzen mit dem Net::SSH::Perl Modul? Noch keinen Erfolg brachten die %params "interactive => 1, use_pty => 1"

Hatte auch schon mit Term::Readkey rumprobiert, aber bislang noch keine passende Lösung hinbekommen.


Danke.


Mein Skript:



Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/perl

use strict;
use warnings;
use Net::SSH::Perl;
use Math::BigInt::GMP;
use Term::ReadKey;

my $host = "IPADRESSE";
my $username = "USERNAME";
my $old_password = "PASSWORD_ALT";
my $new_password = "PASSWORD_NEU";

my $ssh = Net::SSH::Perl->new(  $host,
                                debug => 1,
                                protocol => '2',
                                #use_pty => 1,
                                #interactive => 1,
                                options => ["UsePrivilegedPort no"]);

$ssh->login($username, $old_password);


# Testen welches OS

my ($stdout, $stderr, $exit) = $ssh->cmd('uname');


chomp $stdout;
if   ( $stdout eq "SunOS") { &solaris; }
else                       { &linux;   }

print "Betriebssystem: $stdout \n";


sub solaris
{

        $ssh->register_handler("stderr", sub {
        my($channel, $buffer) = @_;
        my $str = $buffer->bytes;
        print "STRING $str\n";



       if ($str eq "Enter existing login password:") {
       print "Enter exisiting \n";
       $channel->send_data($old_password);
       }

       elsif ($str eq "New Password:") {
       print "New \n";
       $channel->send_data($new_password);
       }

       elsif ($str eq "Re-enter new Password:") {
       print "New again \n";
       $channel->send_data($new_password);
       }
       });
}

sub linux

{

    $ssh->register_handler("stderr", sub {
    my($channel, $buffer) = @_;
    my $str = $buffer->bytes;
    print "STRING $str \n";
    if ($str eq "(current) UNIX password: ") {
        $channel->send_data($old_password);
    }

    elsif ($str eq "Enter new password: ") {
        $channel->send_data($new_password);
    }

    elsif ($str eq "Re-type new password: ") {
        $channel->send_data($new_password);
    }
    });
}

$ssh->cmd('passwd');

View full thread Problem mit Net::SSH::Perl