Font
[thread]4382[/thread]

Net::SSH::Perl Login ohne Prompt

Readers: 4


<< >> 4 entries, 1 page
_B_
 2005-11-20 03:02
#36934 #36934
User since
2005-11-20
3 articles
BenutzerIn
[default_avatar]
Hallo.

Dieser Code

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

use warnings;
use strict;

use Net::SSH::Perl;

my $ssh = Net::SSH::Perl->new("A.B.C.D",
       port => "22",
       debug => "1",
       interactive => "0",
       options => [
               "BatchMode 1"
               ]
       );
$ssh->login('user','password');
my($out,$err,$exit) = $ssh->cmd("uname -a");
print "$out\n";


soll sich auf dem Host A.B.C.D mit dem Usernamen user anmelden. Leider ist es nichts mit dem promptlosen Login. Das Skript bricht beim Versuch der Publickey-Authentifizierung mit dem folgenden Fehler ab. (Zeile 16 ist die Zeile mit $ssh->login... . Der Fehler tritt beim Aufruf des Skripts als root und non-root auf.)

Code: (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
machine: Reading configuration data /home/admin/.ssh/config
machine: Reading configuration data /etc/ssh_config
machine: Connecting to A.B.C.D, port 22.
machine: Remote protocol version 2.0, remote software version OpenSSH_4.2p1 Debian-5
machine: Net::SSH::Perl Version 1.29, protocol version 2.0.
machine: No compat match: OpenSSH_4.2p1 Debian-5.
machine: Connection established.
machine: Sent key-exchange init (KEXINIT), wait response.
machine: Algorithms, c->s: 3des-cbc hmac-sha1 none
machine: Algorithms, s->c: 3des-cbc hmac-sha1 none
machine: Entering Diffie-Hellman Group 1 key exchange.
machine: Sent DH public key, waiting for reply.
machine: Received host key, type 'ssh-dss'.
machine: Host 'A.B.C.D' is known and matches the host key.
machine: Computing shared secret key.
machine: Verifying server signature.
machine: Waiting for NEWKEYS message.
machine: Enabling incoming encryption/MAC/compression.
machine: Send NEWKEYS, enable outgoing encryption/MAC/compression.
machine: Sending request for user-authentication service.
machine: Service accepted: ssh-userauth.
machine: Trying empty user-authentication request.
machine: Authentication methods that can continue: publickey,keyboard-interactive.
machine: Next method to try is publickey.
Permission denied at ./perlssh line 16


Es scheint, als müsse das Skript zunächst den Publickey Versuch machen, um als nächstes den Passwort-Login zu versuchen. Wie kann ich die Authentication-Method manuell setzen? Das Verhalten ist nachvollziehbar unter Linux wie MacOS X, hängt also nicht an der Plattform.

Danke für Ideen und Hilfe.

Sebastian

edit pq: code-tags hinzugefügt\n\n

<!--EDIT|_B_|1132483083-->
_B_
 2005-11-20 19:34
#36935 #36935
User since
2005-11-20
3 articles
BenutzerIn
[default_avatar]
bin einige schritte weiter.

der alte fehler lag nicht am skript, sondern an der config des sshd auf der remote maschine ("PasswordAuthentication no" in sshd_config). das skript (s.u.) läuft also durch, aber: die reihenfolge der "authentication methods" will sich nicht ändern lassen. diese ist defaultmässig "hostbased,publickey,keyboard-interactive,password". das hat zur folge, dass 3 prompts zur eingabe des passwortes erscheinen. in diese kann ich "test, wurst, sonstiges" eingeben (also nix passendes), sie muss nur durchlaufen werden. die letzte (password) klappt dann und das skript tut.

wie kann ich die reihenfolge ändern? die doku des moduls sagt, dass man im hash %config "options => ..." angeben kann, das klappt aber nicht. es sollte auch gehen, die config über die normale ssh_config zu machen. ändert aber auch nix. mein plan ist es, die option "ChallengeResponseAuthentication no" zu setzen. das ist die method laut debug ausgabe.

:ratlos

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

# caution: this script logs into remote machine and execute commands.
# for the script to work fine, the sshd on the remote machine must accept
# password-based authentication. this is controlled with the parameter
# "PasswordAuthentication yes" in sshd_config.

use warnings;
use strict;

use Net::SSH::Perl;

my $host = '192.168.100.21';
my $port = '22';
my $user = 'dummy';
my $pass = 'dummy';

my %config = (
port => $port,
debug => 1,
interactive => 0,
options => ["ChallengeResponseAuthentication no"]
);

my $ssh = Net::SSH::Perl->new($host, %config);
$ssh->login($user, $pass);

my ($out, $err, $exit) = $ssh->cmd("uname -a");
print "$out\n";
if ($out =~ /^Darwin/) {
($out, $err, $exit) = $ssh->cmd("sw_vers");
print "$out\n";
}
pKai
 2005-11-21 11:58
#36936 #36936
User since
2005-02-18
357 articles
BenutzerIn
[default_avatar]
Wieso erscheinen "3 prompts"?
Weder "hostbased" noch "publickey" erzeugen einen Prompt.
"keyboard-interactive" kannst du vom Client her ausschliessen, wie du es auch im ursprünglichen Beispiel gemacht hattest (BatchMode => 1).
GGf nochmal einen trace posten, wenn noch Probleme auftreten.
I sense a soul in search of answers.
_B_
 2005-11-22 13:41
#36937 #36937
User since
2005-11-20
3 articles
BenutzerIn
[default_avatar]
die 3 prompts kommen alle vom "keyboard-interactive", das ist der parameter "ChallengeResponseAuthentication" in ssh_config. den kann man in der tat ausschalten, zumindest theoretisch. nach laaaaangem suchen hab ichs hinbekommen.

die lösung: wie nach murphy's law zwangsläufig, hatte ich am anfang das modul perl modul per cpan installiert, und zwar in der version 1.28. diese version geht nicht korrekt mit der option ChallengeResponseAuthentication um. sprich: gar nicht. ein update auf 1.29 - hatte ich am anfang schon mal gemacht - verursacht dann einen fehler -> blabla IO::Handle ... blocking. den kann man manuell kicken,  in Net::SSH::Perl.pm zwei zeilen auskommentieren:

Code: (dl )
1
2
    #defined($sock->blocking(0))
   #    or die "Can't set socket non-blocking: $!";


wenn von version 1.29 dieser blocking fehler nicht mehr ausgelöst wird, findet die option challenge-bla anwendung (endlich!) und die prompts bleiben aus und der login erfolgt automatisch.
<< >> 4 entries, 1 page



View all threads created 2005-11-20 03:02.