Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10950[/thread]

Net::ssh::perl authentifizierungs-problem

Leser: 3


<< >> 8 Einträge, 1 Seite
crest
 2007-12-04 11:02
#103423 #103423
User since
2007-12-04
5 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich möchte mich gerne bei einem pc im netzwerk einloggen und verschiedene cmds ausführen. Komischerweise, werde ich allerdings bei jedem cmd nach einem passwort gefragt, obwohl ich das ja ganz am anfang mitgegeben habe.

So sieht mein code bisher aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
use Net::SSH::Perl;

my $host = "hostname";
my $pass = "passwort";
my $user = "benutzername";
my $ssh = Net::SSH::Perl->new($host);
$ssh->login($user, $pass);

# test-command
($out, $err, $exit) = $ssh->cmd("ls -l");
print ("$out");
print ("$err");
print ("$exit");


Eigentlich sollte das aber doch auch ohne die interaktive passwortabfrage funktionieren, oder?


PS: Wenn ich versuche das ssh-protocol 2 zu benutzen, bei dem man ja mehrere commands in einer connection ausführen kann, dann bekomme ich eine fehlermeldung. Allerdings weiß ich auch nicht, wo da das problem liegt.

Denn mit ssh 2 müsste man ja nur einmal am anfang user+pass beim login mitgeben und könnte dann beliebig viele commands ausführen, ohne nach dem PW gefragt zu werden.

Fehlercode
Quote
Tk::Error: Permission denied at script_v_0-3.pl line 330
Math::BigInt::BEGIN at (eval 15) line 1
Math::BigInt::BEGIN at (eval 16) line 1
Math::BigInt::BEGIN at (eval 17) line 1
Math::BigInt::BEGIN at (eval 34) line 1
Math::BigInt::BEGIN at (eval 35) line 1
Math::BigInt::BEGIN at (eval 37) line 1
Math::BigInt::BEGIN at (eval 38) line 1
Math::BigInt::BEGIN at (eval 40) line 1
Math::BigInt::BEGIN at (eval 41) line 1
Carp::croak at /usr/lib/perl5/5.8.8/Carp.pm line 269
Net::SSH::Perl::fatal_disconnect at /usr/lib/perl5/site_perl/5.8.8/Net/SSH/Perl.pm line 258
Net::SSH::Perl::SSH2::login at /usr/lib/perl5/site_perl/5.8.8/Net/SSH/Perl/SSH2.pm line 66
main::test at script_v_0-3.pl line 330
Tk callback for .frame.button4
Tk::__ANON__ at /usr/lib/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/Tk.pm line 247
Tk::Button::butUp at /usr/lib/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/Tk/Button.pm line 111
<ButtonRelease-1>
(command bound to event)
GwenDragon
 2007-12-04 17:56
#103445 #103445
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
user image
1) Verwende bitte use strict; und use warnings;
2) Woher weist du in Zeile 7, ob das ssh-Handle gültig ist?
3) Woher weist du, ob das login geklappt hat?

Du überprüfst so einiges nicht. Geht doch ohne Abfrage, ist kein guter Programmierstil und so findest du deine Fehlermeldungen erst ganz spät irgendwo anders wieder.

Bitte erweiter das doch mal.

Schau auch bitte mal auf http://search.cpan.org/~dbrobins/Net-SSH-Perl-1.30...

Welche Version von Net-SSH-Perl benutzt du denn?
crest
 2007-12-05 09:43
#103461 #103461
User since
2007-12-04
5 Artikel
BenutzerIn
[default_avatar]
Vielen Dank für deine Antwort :)


Version von Net-SSH-Perl: 1.30


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl
use Net::SSH::Perl;
use strict;
use warnings;

my $host = "hostname";
my $pass = "passwort";
my $user = "benutzername";
my $ssh = Net::SSH::Perl->new($host, protocol => "1");
$ssh->login($user, $pass);

# test-command
(my $out, my $err, my $exit) = $ssh->cmd("ls -l");
print ("$out");
print ("$err");
print ("$exit");



use strict, use warnings eingebaut und bei 'my' bei $out, $rr $exit hinzugefügt (da gabs ne warnung: Global symbol "$out" requires explicit package name - für die beiden anderen vars auch.

2. Ich weiß leider nicht, wie ich das prüfen kann (und was genau ist das ssh-handle? das objekt, das bei
"Net::SSH::Perl->new($host)" zurück gegeben/erschaffen wird? )

3. Eigentlich weiß ich es nicht, aber auch wie bei 2. hab ich leider ka, wie ich das nachprüfen kann.


Ja, ich hab erst mit proggen angefangen, deswegen bin ich noch etwas unerfahren :(
Die Doku hatte ich mir auch schon vorher durchgelesen, von da hab ich ja eigentlich auch den code kopiert:

Quote
use Net::SSH::Perl;
my $ssh = Net::SSH::Perl->new($host);
$ssh->login($user, $pass);
my($stdout, $stderr, $exit) = $ssh->cmd($cmd);

renee
 2007-12-05 09:47
#103462 #103462
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zum Thema use strict: Wiki:Artikel

Und mach mal aus
Code (perl): (dl )
my $ssh = Net::SSH::Perl->new($host);
das hier:
Code (perl): (dl )
my $ssh = Net::SSH::Perl->new($host, debug => 1);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
crest
 2007-12-05 09:54
#103463 #103463
User since
2007-12-04
5 Artikel
BenutzerIn
[default_avatar]
ok, bei debug kommt folgende meldung:

Quote
zielhost: Connecting to zielhost, port 22.
zielhost: Remote version string: SSH-1.99-OpenSSH_4.4

zielhost: Remote protocol version 1.99, remote software version OpenSSH_4.4
zielhost: Net::SSH::Perl Version 1.30, protocol version 1.5.
zielhost: No compat match: OpenSSH_4.4.
zielhost: Connection established.
zielhost: Waiting for server public key.
zielhost: Received server public key (768 bits) and host key (1024 bits).
zielhost: Host 'zielhost' is known and matches the host key.
zielhost: Encryption type: DES3
zielhost: Sent encrypted session key.
zielhost: Received encryption confirmation.
zielhost: RSA authentication using agent refused.
zielhost: RSA authentication failed: Can't load public key.
zielhost: Doing challenge response authentication.


Das heir scheint das problem zu sein: RSA authentication failed: Can't load public key.
Woran könnte das liegen ?
crest
 2007-12-07 11:44
#103542 #103542
User since
2007-12-04
5 Artikel
BenutzerIn
[default_avatar]
ok, Problem gelößt ;D

ich hatte nur einen RSAkey für das SSHprotokoll 2 generieren lassen, aber der Zielrechner hat Protokoll 2 garnicht unterstützt und hat dann nach dem Key für Protokoll 1 gesucht

Was mich allerdings trotzdem wundert ist, dass obwohl ich ja das Passwort und Username mitgegeben hatte, wurde ich dann trotzdem (nachdem der rsa-key nicht gefunden wurde) nach einem Passwort gefragt. (Manuelle Eingabe)
Das ist ja eigentlich nicht der Sinn der Sache - wozu gebe ich denn dann das Passwort an, wenn es nicht übergeben/übetragen wird.

Andererseits scheint ja zumindest der Login zu funktionieren:
Code (perl): (dl )
1
2
3
4
5
my $host = "hostname";
my $pass = "passwort";
my $user = "benutzername";
my $ssh = Net::SSH::Perl->new($host, protocol => "1");
$ssh->login($user, $pass);


Die Ausgabe in der Konsole ist dann
Quote
zielhost: Connecting to zielhost, port 22.
zielhost: Remote version string: SSH-1.99-OpenSSH_4.4

zielhost: Remote protocol version 1.99, remote software version OpenSSH_4.4
zielhost: Net::SSH::Perl Version 1.30, protocol version 1.5.
zielhost: No compat match: OpenSSH_4.4.
zielhost: Connection established.


Wenn ich dann aber wie auch in der Doku einen Befehl sende, dann gehts wieder nicht. Es scheint also das Passwort nur beim 1. Mal (Login-funktion) übergeben zu werden und danach nie mehr.
In Protkoll 1 wird ja für jeden Command, den man sendet extra eine neue Verbindung aufgebaut und nach der Ausführung des cmds wieder geschlossen.
Code (perl): (dl )
1
2
3
4
(my $out, my $err, my $exit) = $ssh->cmd("ls -l");
print ("$out");
print ("$err");
print ("$exit");

Quote
iai-jakob2: Waiting for server public key.
iai-jakob2: Received server public key (768 bits) and host key (1024 bits).
iai-jakob2: Host 'iai-jakob2' is known and matches the host key.
iai-jakob2: Encryption type: DES3
iai-jakob2: Sent encrypted session key.
iai-jakob2: Received encryption confirmation.
iai-jakob2: RSA authentication using agent refused.
iai-jakob2: RSA authentication failed: Can't load public key.
iai-jakob2: Doing challenge response authentication.



Gibt es da nicht irgend etwas, dass ich evtl übersehen habe, damit das Passwort bei jedem Command/Verbindung automatisch übergeben wird?
nepos
 2007-12-07 12:49
#103550 #103550
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Dass er dich nach dem PW fragt, wenn der Key nicht gefunden wird, das ist die Standardeinstellung des SSH-Daemons. Sowas kann man allerdings ändern (siehe man sshd_config).
crest
 2007-12-07 15:28
#103577 #103577
User since
2007-12-04
5 Artikel
BenutzerIn
[default_avatar]
ja, aber man gibt doch extra dafür das Passwort + Username an (im Programm).
Also wäre es ja auch ganz geschickt, wenn es auch für etwas (z.b. genau diese Abfrage) verwendet werden würde, denn sonst ist es doch eigentlich total überflüssig.

[quote=Net::SSH::Perl Doku]
use Net::SSH::Perl;
my $ssh = Net::SSH::Perl->new($host);
$ssh->login($user, $pass);
my($stdout, $stderr, $exit) = $ssh->cmd($cmd);[/quote]
<< >> 8 Einträge, 1 Seite



View all threads created 2007-12-04 11:02.