PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl --> Daten kopieren über hosts per ssh



spike
04-06-2003, 10:50
Hi Folks,

kann mir jemand mal auf die Sprünge helfen und ein Beispiel für das kopieren mittels Perl mit ssh (ohne Passwortabfrage) von einem Rechner auf einen anderen Posten.

DANKE !!!!

Grüße, Spike

elrond
04-06-2003, 11:59
das sind ja zwei probleme auf einmal:

1. ssh
2. copy mit perl

zu 1. belies dich einfach mal zu ssh. wenn du schaffst dich am remote-host mittels "ssh host" anzumelden ohne nach dem password gefragt zu werden ist die erste hürde genommen. (zuerst keys generieren und dann austauschen...)

zu 2. wenn ssh geht kannst du scp dafür benutzen. einfach mittels auf der shell ausführen... alternativ dazu findet sich wahrscheinlich auch ein entsprendes Modul bei cpan. Die sind in aller Regel gut dokumentiert und mit beispielen.

spike
04-06-2003, 13:32
1.

ja ok habe mich vielleicht nicht richtig ausgedrückt, also ssh ist installiert, keys generiert, das bereitstellen der Keys muss ich noch machen, falls es keine andere möglichkeit mit perl gibt.

2. Das ich das ganze über system aufrufe machen kann ist klar. Allerdings würde ich schon gerne die Möglichkeiten von Perl nutzen.

Im cpan archiv und diversen foren habe ich schon gesucht. Die ssh module für perl sind im cpan auch gelistet und beschrieben. Allerdings habe ich mit ssh unter perl noch nichts gemacht und habe gedacht jemdand könnt mich vor groben Schnitzern bewahren.

elrond
05-06-2003, 06:02
also ich mach das genau so wie oben angedeutet. Ich habe die pub-keys ausgetauscht und somit eine Verbindung ohne explizites login. Ich halte das für besser, als passwörter in einem script zu hinterlegen, das vielleicht auf irgendeiner Entwicklungsmaschine versehentlich rumliegt...


In meinem Perl-Script passiert dann folgendes:



if($fileok==0) { #falls Datei nicht vorhanden
if($route eq "r2l" ) {
writelog("Datei kopiert: $user\@$host:$rdir$sfile -> $ldir$sfile");
$scpcmd="/usr/bin/scp -pC $user\@$host:$rdir$sfile $ldir$sfile";
$chkcmd="ls $ldir$sfile";
}
if ($route eq "l2r" ) {
writelog("Datei kopiert: $ldir$sfile -> $user\@$host:$rdir$sfile");
$scpcmd="/usr/bin/scp -pC $ldir$sfile $user\@$host:$rdir$sfile";
$chkcmd="ssh $user\@$host\ ls $rdir$sfile";
}
`$scpcmd`;
if (transfercheck($chkcmd) && $movedir ne "") {
`mv $ldir$sfile $movedir`;
}




ich baue einfach ein scp-comando zusammen und führe das aus. ob das sonderlich geschickt ist weiss ich nicht. ich bin aber nicht darauf angewiesen, dass überall wo ich das einsetzt entsprechende module installiert sind.:cool:

da das für mich ok ist habe ich mich mit dem modul Net::SSH nicht beschäftigt...

spike
05-06-2003, 06:30
danke für Dein Beispiel...


Zu diesem Thema findet man wirklich wenig im Netz (vielleicht bin ich auch zu blöd zum Suchen).

Ich werde das jetzt erstmal so umsetzen wie Du es gepostet hast, und komme damit schon weiter.

Eine Frage stellt sich mir dann doch wenn Du das ganze über exec abhandelst kannst Du ja auch gleich ein Shell skript schreiben :-) ...

Also Ihr Perl -Progger traut Euch mal zu einem Beispiel mit Perl ssh modulen.

Danke+Grüße, Spike

phate
05-06-2003, 08:45
Hi spike,

hab Net::SSH::Perl bzw. sein Windows-Gegenstück nur zur geskripteten Befehlsausführung über ne SSH-Verbindung missbraucht. Mit denen selbst wirste auch nicht ohne weiteres einen File-Transfer hinbekommen.

Aber dazu gibts das darauf aufbauende Net::SFTP vom gleichen Autor. Und wenn Dir die Doku unter [1] oder das Beispielprogramm psftp im eg/ Unterverzeichnis des Pakets nicht weiterhilft, ja dann ...

gruss,

phate

[1] http://search.cpan.org/author/BTROTT/Net-SFTP-0.05/lib/Net/SFTP.pm