Thread Problem mit Net::SSH::Perl
(16 answers)
Opened by tecker at 2008-10-22 17:30
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 Code: (dl
)
ssh -t USER@SOLARISHOST passwd 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'); |