PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem bei Net::SSH::Perl



tomes
25-06-2002, 19:08
Folgendes *prob*, ich wollte Net::SSH::Perl in ein cgi- Script einbauen.

-----snip-----
#!/usr/bin/perl -w
#
#
####################
# Biblioteken
####################
$|=1;
use strict;

use CGI qw/ :form :cgi/;
use POSIX;
use Net::SSH::Perl;

my $cgi = new CGI;

####################
# Variable
####################
my $host = "tomes";
my $cmd = "ls -l";
my $user = "xxxxxx";
my $pass = "xxxxxx";
####################
# http Document ausgeben
####################
print "Content-type: text/html\n\n";

print "
<html>
<head>
<title>SSH Test</title>
</head>
<body bgcolor=#00C8FF>
<font face=arial size=3 color=blue>
Test mit Net-SSH-Perl
<hr>
";

my $session = Net::SSH::Perl->new($host);
$session->login($user,$pass);
my @ssh = $session->cmd($cmd);

print "command ist: <br>\n";
for (@ssh)
{
print $_,"<br>\n";
}

print "</body>\n</html>\n";
-----snap-----
So sieht das Script ersteinmal aus. Wenn es ausgefuehrt wird bekomme ich in der /httpd/error_log folgende Fehlermeldung:
mkdir /.ssh: Permission denied at /usr/lib/perl5/site_perl/5.6.1/Net/SSH/Perl/Util/Hosts.pm line 50

Wenn man das ganze auf der Shell ausfuehrt, klappt es !

Wo liegt der (Denk)Fehler ?

T;o)Mes:(

elrond
26-06-2002, 11:58
bist du auf der shell vielleicht root ?
und dein webserver wwwrun ? ;)

tomes
26-06-2002, 12:21
als wwwrun auf der Shell ausfuehre *funct* es ;-(

Die Stelle aus der Hosts.pm an der es haengt ist:

sub _add_host_to_hostfile {
my($host, $hostfile, $key) = @_;
unless (-e $hostfile) {
require File::Basename;
my $dir = File::Basename::dirname($hostfile);
unless (-d $dir) {
require File::Path;
File::Path::mkpath([ $dir ]) <-- Zeile 50
or die "Can't create directory $dir: $!";
}
}
open FH, ">>" . $hostfile or croak "Can't write to $hostfile: $!";
print FH join(' ', $host, $key->dump_public), "\n";
close FH or croak "Can't close $hostfile: $!";
}

Ich glaub das es daran liegt, das der wwwrun die known_hosts des Users nicht oeffnen kann oder Umgekehrt ?
Aber warum bringt er dann nicht die Fehlermeldung.
Der Client haengt einfach wieder auf. ssh-log beim ausfuehren des cgi:
Jun 26 13:25:35 tomes sshd[1672]: Connection from ::ffff:192.168.1.2 port 2620
Jun 26 13:25:36 tomes sshd[1672]: Connection closed by ::ffff:192.168.1.2

Also geht das ganze ueber cgi nicht, ohne grosse Sicherheits- Loecher aufzumachen ???

T;o)Mes

TommeS73
01-07-2002, 16:06
@tomes:

ich würde mir an Deiner Stelle mal den Spass machen und Dein Skript durch den Debugger jagen,

denn irgendetwas muss doch in $dir drin stehen, wo Dir irgendwie die Rechte fehlen ->

denn anscheinend wir versucht ein Verzeichnis anzulegen, was nicht erlaubt ist.

[Spekulation an]

Kann es vielleicht sein, dass Net::SSH:Perl versucht, ein Verzeichnis unter /cgi-bin/ anzulegen, wozu der Benutzer wwwrun keine Berechtigung hat?

[Spekualtion aus]

tomes
02-07-2002, 10:19
Die Idee das ganze zu debuggen hatte ich auch schon. Das *prob* daran ist nur, dass wenn ich das ganze auf Shell-Ebene ausfuehre, geht er garn nicht in die Hosts.pm. Wird nicht aufgerufen.
Das Script funktioniert ja auch wunderbar auf Shell-Ebene.

Das mit den Berechtigungen setzten hab ich solangsam auch alles durch. Weiss jedenfalls nicht mehr welche Berechtigung ich wo und wie noch setzten soll/kann.
Verzeichnis in dem das ganze Aufgerufen wird (cgi-bin/versuche) ist jetzt schon auf 777 ;-(
Auch .ssh Verzeichnisse.
Ist ja nur ein Versuchs-Rechner ;-).
So langsam finde ich mich damit ab, dass das Ganze nicht mit cgi laeuft.Werd wohl mal das Ganze mit Net::SSH probieren.
Aber falls noch jemand eine Idee hat, Danke. Wollte eigendlich mit Password arbeiten.

T;o)Mes