Thread Net::SSH2 mit passwort geschützter public key authentication (9 answers)
Opened by br0tkasten at 2009-12-14 15:47

br0tkasten
 2009-12-16 08:56
#129426 #129426
User since
2009-07-22
6 Artikel
BenutzerIn
[default_avatar]
Danke erstmal für die vielen Antworten.

@Taulmarill: Sowohl eine manuelle Anmeldung (ssh user@123.4.5.6) als auch eine Anmeldung mit dem Key _ohne_ Passwort (ssh-keygen -f /home/user/.ssh/id_rsa -p, dann zwei mal enter) funktionieren problemlos. Auch die Zugriffsrechte auf die Keys sind ausreichend für den Zugriff durch das Perl Script.

Habe jetzt meinen Code wie vorgeschlagen erweitert. Das ganze sieht dann so aus

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
#!/usr/bin/perl

use Net::SSH2;

my $IP      = "123.4.5.6";
my $PRIVKEY = "/home/user/.ssh/id_rsa";
my $PUBKEY  = "/home/user/.ssh/id_rsa.pub";
my $USER    = "remoteUser";

my $ssh = Net::SSH2->new();

$ssh->connect($IP,22) or die("connect(): $!\n");
$ssh->error && print "Connect: " . $ssh->error . "\n";

$ssh->auth_publickey($USER,$PUBKEY,$PRIVKEY,'foobar');
$ssh->error && print "Auth: " . $ssh->error . "\n";

die("authentication failed\n") unless($ssh->auth_ok);

my $channel = $ssh->channel() or die("channel(): $!\n");
$ssh->error && print "Channel: " . $ssh->error . "\n";

$channel->shell();
$ssh->error && print "Shell: " . $ssh->error . "\n";

print $channel "uname -a\n";
while(<$channel>)
{
   print "$_";
}

$channel->close();


Wird dem SSH Key wie oben beschrieben das Passwort entfernt erfolgt die Abarbeitung bis zum Ende "fehlerfrei". Ich schreibe hier "fehlerfrei" weil $ssh->error auch in diesem Fall bei jeder Abfrage den Wert -37 zurückliefert. Auf der Konsole sieht das ganze dann so aus

Code: (dl )
1
2
3
4
5
6
$ ./key-auth.pl 
Connect: -37
Auth: -37
Channel: -37
Shell: -37
Linux foobar 2.6.29.6-smp #2 SMP Mon Aug 17 00:52:54 CDT 2009 i686 Intel(R) Pentium(R) 4 CPU 2.66GHz GenuineIntel GNU/Linux


Wird dem SSH key anschließend wieder ein Passwort vergeben (ssh-keygen -f /home/user/.ssh/id_rsa -p) sieht die Ausgabe dann wie folgt aus.

Code: (dl )
1
2
3
4
$ ./key-auth.pl 
Connect: -37
Auth: -16
authentication failed


Für den letzten Fall konnte ich kein Logfile finden in dem irgend etwas über einen Verbindungsversuch auftaucht.

//EDIT zu der Sache mit $ssh->debug(1) ist mir aufgefallen, dass eine Ausgabe produziert wird, wenn der key nicht durch ein Passwort geschützt ist. Ich schließe daraus, das Problem liegt in der Verarbeitung des Keys durch Net::SSH2. Werde mich diesbezüglich wohl mal mit seinem Author in Verbindung setzen.
Last edited: 2009-12-16 09:01:22 +0100 (CET)

View full thread Net::SSH2 mit passwort geschützter public key authentication