Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
use Net::SSH::Perl; use Net::SSH::Perl::Auth::Password; # Benutzeridentifikation my $host = "192.168.1.101"; my $user = "USER"; my $password = "USERPASSWORD"; my $auth = Net::SSH::Perl::Auth->new('Password', $ssh); # Verbindung herstellen, wenn fehlgeschlagen, dann alle 5s neu versuchen. for (;;) { my $ssh = Net::SSH::Perl->new($host); print $ssh; my $auth = Net::SSH::Perl::Auth->new('Password', $ssh); } ... dann weiter |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »mollilinux« (24.02.2010, 15:57)
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Garrett« (22.02.2010, 12:20)
Zitat von »Garret«
Tschuldige die Zwischenfrage, aber warum soll die Verbindung immer offen bleiben? Warum nicht alle 2 min verbinden, logs übertragen, trennen?
Zitat von »Garret«
Ist der Anhang ein bisschen anders als das, was du beschreibst?
Quellcode |
|
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 |
my $startTime = getUnixTime(); my $timeNow = $startTime; my $duration = 0; my $auth = 0; my $tmp; while (true) { # daemon-Schleife if ( ( ($timeNow - $startTime) % (120 + $duration) ) == 0 ) { while ( not $auth ) { # Verbindungsschleife if ( ( ($timeNow - ($startTime+$duration)) % 5 ) == 0 ) { doConnect(); doAuth(); } $tmp = getUnixTime(); $duration = $tmp - $timeNow; $timeNow = tmp; } getLogs(); disconnect(); $auth = 0; } $duration = getUnixTime() - $timeNow; $timeNow = getUnixTime(); } |
Zitat von »Garrett«
Pseudocode(Heißt: keine Garantie für korrekte Perl-Syntax)-Vorschlag, von dem ich nicht sagen kann, ob er was taugt.
Quellcode |
|
1 2 3 4 5 6 7 8 9 |
use Net::SSH::Perl; $scon = Net::SSH::Perl->new("HOST-IP"); $scon->login("USER","PASSWORT"); print "Baue Verbindung auf...\n"; ($output,$errors,$exit) = $scon->cmd("ls -l"); print $output; |
Quellcode |
|
1 2 3 |
molli@penguin ~/projects/mprm $ perl verb2.pl Math::BigInt: couldn't load specified math lib(s), fallback to Math::BigInt::Calc at /usr/lib/perl5/vendor_perl/5.8.8/Crypt/DH.pm line 6 Permission denied at verb2.pl line 5 |
Zitat von »Garrett«
Hast du das Math::BigInt-Modul installiert?
Quellcode |
|
1 2 3 |
perl verb2.pl Permission denied at verb2.pl line 5 molli@penguin ~/projects/mprm $ |
Zitat von »Garrett«
was hast du bei meinem Vorschlag korrigiert? Ich konnt das ja nicht wirklich testen (bzw. wars mir zu aufwendig).
Quellcode |
|
1 |
my $startTime = getUnixTime(); |
Quellcode |
|
1 |
my $startTime = getUnixTime; |
Zitat von »Wernieman«
Ist Line 5 folgende?
Quellcode |
|
1 2 3 4 5 6 7 8 9 |
use Net::SSH::Perl; my $cons = Net::SSH::Perl->new("192.168.1.100", debug => 1 ); $scon->login("molli","molli"); print "Baue Verbindung auf...\n"; ($output,$errors,$exit) = $scon->cmd("ls -l"); print $output; |
Quellcode |
|
1 2 3 4 5 6 7 8 9 |
molli@penguin ~/projects/mprm $ perl verb2.pl penguin.local: Reading configuration data /home/molli/.ssh/config penguin.local: Reading configuration data /etc/ssh_config penguin.local: Connecting to 192.168.1.100, port 22. penguin.local: Remote protocol version 2.0, remote software version OpenSSH_5.2 penguin.local: Net::SSH::Perl Version 1.34, protocol version 2.0. .enguin.local: No compat match: OpenSSH_5.2 penguin.local: Connection established. Can't call method "login" on an undefined value at verb2.pl line 5, <GEN0> line 1. |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »mollilinux« (22.02.2010, 18:53)
Zitat
$ssh->login($user, $pass);
[download]
will never work - by design!
Zitat von »Garrett«
Zitat von »Wernieman«
Aber eigentlich sollte doch es auch ohne Schlüsselauthenmtifizierung gehen ...
Zitat von »Wernieman«
Du weißt wie Du Schlüsselgenerierst und hinterlegst?
Zitat von »Garrett«
Ich konnt das ja nicht wirklich testen (bzw. wars mir zu aufwendig).
Quellcode |
|
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 34 35 36 37 38 39 40 41 42 43 |
#!/usr/bin/perl my $host = 'HOST'; my $user = 'USER'; my $startTime = getUnixTime; my $timeNow = $startTime; my $duration = 0; my $auth = 0; my $tmp; # Subroutine für System-Call sub exec_command { system("doConnect() $cmd_login $ssh_bin $startTime $duration $auth"); } while (true) { # daemon-Schleife if ( ( ($timeNow - $startTime) % (120 + $duration) ) == 0 ) { while ( not $auth ) { # Verbindungsschleife if ( ( ($timeNow - ($startTime+$duration)) % 5 ) == 0 ) { sub doConnect { $cmd_login = "$name\@$host"; $ssh_bin = `which ssh`; chomp $ssh_bin; exec_command(); } doConnect(); # doAuth(); } $tmp = getUnixTime; $duration = $tmp - $timeNow; $timeNow = tmp; } getLogs(); disconnect(); $auth = 0; } $duration = getUnixTime() - $timeNow; $timeNow = getUnixTime(); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
molli@penguin ~/projects/mprm $ perl forum-test.pl sh: -c: Zeile 0: Syntaxfehler beim unerwarteten Wort `@openmolli.dynalias.com' sh: -c: Zeile 0: `doConnect() @openmolli.dynalias.com /usr/bin/ssh getUnixTime 0 0' sh: -c: Zeile 0: Syntaxfehler beim unerwarteten Wort `@openmolli.dynalias.com' sh: -c: Zeile 0: `doConnect() @openmolli.dynalias.com /usr/bin/ssh getUnixTime 0 0' sh: -c: Zeile 0: Syntaxfehler beim unerwarteten Wort `@openmolli.dynalias.com' sh: -c: Zeile 0: `doConnect() @openmolli.dynalias.com /usr/bin/ssh getUnixTime 0 0' sh: -c: Zeile 0: Syntaxfehler beim unerwarteten Wort `@openmolli.dynalias.com' sh: -c: Zeile 0: `doConnect() @openmolli.dynalias.com /usr/bin/ssh getUnixTime 0 0' .... Und noch weitere 100 selbe Zeilen. .... molli@penguin ~/projects/mprm |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »mollilinux« (23.02.2010, 18:18)
Quellcode |
|
1 2 3 |
su - user-unter-dem-script-läuft cd .ssh (wenn .ssh nicht existiert, anlegen) ssh-keygen -t dsa (erzeugt einen DSA-Key, siehe man) |
Quellcode |
|
1 2 3 |
su - user-der-sich-einloggt cd .ssh (wenn .ssh nicht existiert, anlegen) cat id_dsa.pub >>authorized_keys |
Quellcode |
|
1 2 |
su - user-unter-dem-script-läuft ssh user-der-sich-einloggt@server |
Zitat von »Garret«
Ja, klar. Wie gesagt, das war pseudocode. Statt der Funktion getUnixTime() musst du die einsetzen, mit der Perl eben den Unix timestamp zurückgibt.
Quellcode |
|
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 34 35 36 37 38 39 40 41 |
#!/usr/bin/perl use POSIX; # Unix Timestamp use Net::SCP qw(scp); # Datentransfer via SCP # Login Informationen my $user = 'USER'; my $host = 'HOST'; my $localtime = localtime($timing); my $startTime = time(); my $timeNow = time(); my $duration = 0; my $auth = 0; my $tmp; print "Automatisches Backup"; sleep 1; while (true) { # daemon-Schleife if ( ( ($timeNow - $startTime) % (120 + $duration) ) == 0 ) { while ( not $auth ) { # Verbindungsschleife if ( ( ($timeNow - ($startTime+$duration)) % 5 ) == 0 ) { $scp = Net::SCP->new($host, $user); print "Wiederholungsrate"; } $tmp = time(); $duration = $tmp - $timeNow; $timeNow = tmp; } $scp->get("PROTOCOL-FILE") or die $scp->{errstr}; $scp->quit; # Verbindung trennen $auth = 0; } $duration = time() - $timeNow; $timeNow = time(); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
molli@penguin ~/projects/mprm $ perl main.pl ... rholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholung srateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWi ederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederhol ungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrat eWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWieder holungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrate WiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederh olungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsr ateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWied erholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholun gsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateW iederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsr ... molli@penguin ~/projects/mprm $ |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »mollilinux« (23.02.2010, 18:27)
Quellcode |
|
1 2 |
my $startTime = time(); my $timeNow = time(); |
Quellcode |
|
1 2 |
my $startTime = time(); my $timeNow = $startTime; |
Quellcode |
|
1 2 |
$duration = time() - $timeNow; $timeNow = time(); |
Quellcode |
|
1 2 3 |
$tmp = time(); $duration = $tmp - $timeNow; $timeNow = $tmp; |
Zitat von »Garrett«
Ist das Script eigentlich deine Idee, oder ne Hausaufgabe oder sowas?
Zitat von »Garrett«
Die Verbindungsschleife wiederholt sich so lange bis eine Verbindung hergestellt und man angemeldet ist.
Quellcode |
|
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#!/usr/bin/perl use POSIX; # Unix Timestamp use Net::SCP qw(scp); # Datentransfer via SCP # Login Informationen my $user = 'USER'; my $host = 'HOST'; # Protokoll Pfade my $file_path = '"PFAD_ZU_FILE"'; my $localtime = time(); my $startTime = time(); my $timeNow = $startTime; my $duration = 0; my $auth = 0; my $tmp; while (true) { # daemon-Schleife if ( ( ($timeNow - $startTime) % (120 + $duration) ) == 0 ) { while ( not $auth ) { # Verbindungsschleife if ( ( ($timeNow - ($startTime+$duration)) % 5 ) == 0 ) { print "Verbindung wird hergestellt... \n", scalar $scp, "\n"; $scp = Net::SCP->new($host); $scp->login($user); $auth = 1; } $tmp = time(); $duration = $tmp - $timeNow; $timeNow = $tmp; } # Protokoll(e) herunterladen print "Protokolle werden heruntergeladen: \n", scalar $file_path, "\n"; $scp->get($file_path) or die $scp->{errstr}; print "Ausgabe: ", scalar $scp, "\n"; print "Verbindung wird getrennt...\n"; $scp->quit; # Verbindung trennen $auth = 0; } $duration = time() - $timeNow; $timeNow = time(); } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »mollilinux« (25.02.2010, 23:34)