2012-04-09 13 views
0

ich den folgenden Code haben (natürlich ersetzt ich myremoteserver.com):Difference mit Net :: SSH :: Perl auf Perl 5.12 und 5.14

use Modern::Perl; 
use Net::SSH::Perl; 
use Data::Dumper; 

my $ssh = Net::SSH::Perl->new('myremoteserver.com', debug => 1, port => 2999); 

$ssh->login('root'); 
print Dumper $ssh->cmd('uptime'); 

Auf einem Keyless-Umgebung, ich laufe es sowohl auf Perl 5.12 und 5.14.

auf 5,12 Perl scheint es zu funktionieren:

$ perl5.12 /tmp/sshtest.pl 
ko.local: Reading configuration data /Users/david/.ssh/config 
ko.local: Reading configuration data /etc/ssh_config 
ko.local: Connecting to myremoteserver.com, port 2999. 
ko.local: Remote protocol version 2.0, remote software version OpenSSH_5.8p1 Debian-1ubuntu3 
Math::BigInt: couldn't load specified math lib(s), fallback to Math::BigInt::Calc at /opt/local/lib/perl5/site_perl/5.12.3/Crypt/DH.pm line 6 
ko.local: Net::SSH::Perl Version 1.34, protocol version 2.0. 
.o.local: No compat match: OpenSSH_5.8p1 Debian-1ubuntu3 
ko.local: Connection established. 
ko.local: Sent key-exchange init (KEXINIT), wait response. 
ko.local: Algorithms, c->s: 3des-cbc hmac-sha1 none 
ko.local: Algorithms, s->c: 3des-cbc hmac-sha1 none 
ko.local: Entering Diffie-Hellman Group 1 key exchange. 
ko.local: Sent DH public key, waiting for reply. 
ko.local: Received host key, type 'ssh-dss'. 
ko.local: Host 'myremoteserver.com' is known and matches the host key. 
ko.local: Computing shared secret key. 
ko.local: Verifying server signature. 
ko.local: Waiting for NEWKEYS message. 
ko.local: Send NEWKEYS. 
ko.local: Enabling encryption/MAC/compression. 
ko.local: Sending request for user-authentication service. 
ko.local: Service accepted: ssh-userauth. 
ko.local: Trying empty user-authentication request. 
ko.local: Authentication methods that can continue: publickey. 
ko.local: Next method to try is publickey. 
ko.local: Publickey: testing agent key '/Users/david/.ssh/github_rsa' 
ko.local: Authentication methods that can continue: publickey. 
ko.local: Next method to try is publickey. 
Permission denied at /tmp/sshtest.pl line 9 

Aber auf Perl 5.14:

$ perl5.14 /tmp/sshtest.pl 
ko.local: Reading configuration data /Users/david/.ssh/config 
ko.local: Reading configuration data /etc/ssh_config 
ko.local: Connecting to myremoteserver.com, port 2999. 
ko.local: Remote protocol version 2.0, remote software version OpenSSH_5.8p1 Debian-1ubuntu3 
ko.local: Net::SSH::Perl Version 1.34, protocol version 2.0. 
.o.local: No compat match: OpenSSH_5.8p1 Debian-1ubuntu3 
ko.local: Connection established. 
ko.local: Sent key-exchange init (KEXINIT), wait response. 
ko.local: Algorithms, c->s: 3des-cbc hmac-sha1 none 
ko.local: Algorithms, s->c: 3des-cbc hmac-sha1 none 
ko.local: Entering Diffie-Hellman Group 1 key exchange. 
ko.local: Sent DH public key, waiting for reply. 
ko.local: Received host key, type 'ssh-dss'. 
ko.local: Host 'myremoteserver.com' is known and matches the host key. 
ko.local: Computing shared secret key. 
ko.local: Verifying server signature. 
Key verification failed for server host key at /opt/local/lib/perl5/site_perl/5.14.1/Net/SSH/Perl/SSH2.pm line 92 

Der einzige Unterschied, den ich sehe, ist Math :: BigInt eine Warnung zurück auf Perl 5.12.

Einige Debug-Info:

~ $ perl5.12 -MNet::SSH::Perl -e 'print $Net::SSH::Perl::VERSION, "\n";' 
1.34 
~ $ perl5.14 -MNet::SSH::Perl -e 'print $Net::SSH::Perl::VERSION, "\n";' 
1.34 
~ $ perl5.12 -MMath::BigInt -e 'print $Math::BigInt::VERSION, "\n";' 
1.997 
~ $ perl5.14 -MMath::BigInt -e 'print $Math::BigInt::VERSION, "\n";' 
1.997 

Jede Idee, was das Problem hier?

+0

Ist der Client auf zwei verschiedenen Maschinen? Basierend auf dieser Ausgabe versagen beide. Obwohl 5.14 auf dem Host-Schlüssel fehlschlägt, nicht Ihr öffentlicher Schlüssel. Loggen Sie sich manuell mit Ihrem ssh-Client in der Befehlszeile ein und es sollte Ihnen sagen, dass es eine Zeile in known_hosts gibt, die nicht mit dem übereinstimmt, was der Server sendet. Sie können diese Zeile löschen und erneut anmelden und den neuen Schlüssel speichern. In der Regel passiert dies aufgrund einer IP-Änderung. – Cfreak

+0

Dies ist die gleiche Maschine, die dieselbe Umgebung ohne Schlüssel verwendet. Ich habe vergessen darauf hinzuweisen, dass das Problem wirklich nicht ist, dass 5.12 mit verweigerter Berechtigung endet. Das eigentliche Problem ist, dass die 5.14-Perl-Version mit "Key Verification failed für Server-Host-Schlüssel bei /opt/local/lib/perl5/site_perl/5.14.1/Net/SSH/Perl/SSH2.pm Zeile 92" fehlschlägt im Gegensatz zu 5.12 Version o__O – damog

+0

Vielleicht ein Problem mit Math :: BigInt? Seufzer. – damog

Antwort

1

eine Änderung für eine Konfigurationsoption auf den Standardwert war, die kontrolliert, wie https Validierung durchgeführt wurde (genauer gesagt, die PERL_LWP_SSL_VERIFY_HOSTNAMES Umgebungsvariable), wenn LWP::Protocol::https aus dem Haupt LWP Bibliothek gezogen wurde - jetzt ist Hostname Prüfung standardmäßig wo es vorher war. Es ist möglich, dass Ihre Perl 5.14-Bibliothek diese neuen Änderungen übernommen hat und 5.12 die alten Versionen verwendet.

Es gibt auch mehr Informationen in "Now you need LWP::Protocol::https".

+0

Ich glaube nicht, dass dies überhaupt mit LWP und SSL zusammenhängt. Ich glaube, dass Math :: BigInt so implementiert ist, dass es nichts mit SSH oder sogar SSL zu tun hat. – damog

Verwandte Themen