Dateien automatisch per SFTP auf Host-Server laden

  • Hallo zusammen,


    ich bin neu hier im Forum und auch ein Anfänger im Umgang mit einem Raspberry. :|

    Letzte Woche habe ich mir einen Raspberry Pi 3 B (OS Raspbian) zugelegt um Daten der PV-Anlage vom Wechselrichter (SMA) zu lesen.

    Dazu habe ich SBFspot runtergeladen und nach Anleitung installiert (bis auf den Teil, wo die Daten zu PVOutput.org hochgeladen werden).


    Die Daten werden korrekt vom Wechselrichter runtergeladen und auf dem Pi abgelegt.

    Nun möchte ich die csv-Dateien automatisiert auf den Server meines Hosters (1&1) hochladen.

    Dieses geht nur mit dem SFTP-Protokoll.


    Auf der HP von Bernhard Weichel (weichel21.de) ist eine Anleitung wie er die Daten per FTP hochlädt.

    Ich habe versucht den Cronjob anzupassen, jedoch nur mit einem Teilerfolg.

    Die Verbindung mit dem SFTP-Server wird hergestellt, jedoch muss ich das Passwort manuell eingeben.

    Genau das möchte ich aber nicht.

    Desweiteren sind im Anschluss die Befehle um die Dateien hochzuladen und zum Schluß die Verbindung zu beenden.

    Dieses sind allerdings glaube ich FTP-Befehle und keine SFTP-Befehle. (teilweise Unterscheidung?)


    Hier die Cronjob-Datei:


    #!/bin/bash

    /usr/local/bin/sbfspot.3/SBFspot -v


    DATADIR=/tmp/smadata

    DAYS=2

    MONTH=1


    # SBFspot-Verzeichnis

    SBFSPOT=/usr/local/bin/sbfspot.3/SBFspot

    SBFSPOTCFG=/usr/local/bin/sbfspot.3/SBFspot.cfg


    # SFTP-Verzeichnis

    FTPSERVER=MeinServer

    FTPUSER=MeinUser

    FTPPASSWORD=MeinPasswort

    FTPDIR=MeinVerzeichnis


    # clean DATADIR ******wird von mir nicht benötigt

    rm -rf $DATADIR

    mkdir -p $DATADIR


    # Daten von SMA-WR holen

    $SBFSPOT -cfg$SBFSPOTCFG -ad$DAYS -am$MONTH -nosql -finq


    # Upload to Server

    pushd $DATADIR

    rm -rf *-SPOT-*.csv


    # -i dont confirm

    # -n disable autologin

    # sftp -i $FTPSERVER << End-Of-Session

    sftp $FTPUSER@$FTPSERVER:/$FTPDIR

    pass $FTPPASSWORD

    cd $FTPDIR

    ascii

    put "*.csv"

    bye


    # In der ursprünglichen Datei stand hinter dem FTP-Befehl noch ein "<< End-Of-Session" ???

    End-Of-Session


    popd



    Ich habe schon einige Foren durchsucht, konnte aber nichts passendes finden.

    Ich hoffe ihr könnt mir weiterhelfen und habt ein wenig Nachsicht für einen Anfänger.


    Gruß

    Ralf

  • Leider bin ich in dieser Art der Programmierung nicht besonders firm.

    Meine Programmierkenntnisse beschränken sich auf die SPS-Welt.

    Von daher wäre ich froh über jede praktische Hilfe.

    :danke_ATDE:

  • Hallo WeiRa,


    willkommen im Forum!


    Nicht ganz leicht da was Passendes zu finden. Ob es eine gute Idee ist ein Passwort in Klartext in eine Datei zu schreiben steht auf einem anderen Blatt... :-/

    (Quelle: https://travelingfrontiers.wor…and-a-bash-script-wrapper)


    Musst Du natürlich anpassen und achtung von mir ungetestet da ich im Moment keine Möglichkeit dazu habe!

  • Weil es mich interessierte habe ich eben mal genauer nachgesehen wie es mit lftp funktioniert ohne das PWD in der Datei zu haben:

    Code
    1. lftp sftp://<USER>@<HOST> -e "cd $FTPDIR;ascii;put \"*.csv\";bye"

    und dann in der ~/.netrc

    Code
    1. machine <HOST>
    2. login <USER>
    3. password <PASSWORD>

    Et voilà :bravo2: das war's

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Torvalds, 28.9.2003

    >>> raspiBackup: Sichere Deine Raspberry regelmäßig im laufenden Betrieb <<<

  • SFTP?

    wirklich?


    Oder geht auch SSH, und damit SCP?


    Beim zugriff per SSH, und damit auch SCP, kann man auf dem Zielsystem das öffentlichen Schlüssel des Benutzers hinterlegen, der die Daten kopiert.

    Eigentlich sollt das auch beim SFTP möglich sein.


    (Der Schlüssel kommt in die Datei ~/.ssh/authorized_keys, auf die nur gelesen werden sollte (600). Die Datei muss dem lokalen Benutzer gehören)


    Beim SCP wird die Datei ganz einfach kopiert.

    (Quelle: /home/pi/SBFspot/MyPlant.csv

    Ziel: ~/domaene/SBFspot/solardaten.csv, Name des des Domänen-Users: user@.example.com)


    Code
    1. scp /home/pi/SBFspot/MyPlant.csv user@.example.com:domaene/SBFspot/solardaten.csv

    Selber denken,
    wie kann man nur?

  • SFTP?

    wirklich?


    Oder geht auch SSH, und damit SCP?

    Nein. Beim Standard 1und1 Account geht nur ftp oder sftp. Oder webdav.

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Torvalds, 28.9.2003

    >>> raspiBackup: Sichere Deine Raspberry regelmäßig im laufenden Betrieb <<<

  • Hallo,


    vielen Dank für die schnellen Antworten. :thumbup::)

    Hab es jetzt erstmal per Script von hyle hinbekommen. :danke_ATDE:

    Wenn ich das richtig verstehe ist lftp ein Programm, dass ich installieren muss, (sudo apt-get install lftp) richtig?

    Die Login-Daten werden in einer /.netrc gespeichert.

    Wo liegt diese Datei oder wird sie erst bei Installation von lftp erzeugt?

  • Die Datei erstellst Du in das Homeverzeichnis Deines angemeldeten Users (z.B. pi) am einfachsten geht das mit nano ~/.netrc aber ohne sudo!

    Nach dem Eintragen der Anmeldedaten und speichern, solltest Du dann noch die Rechte ändern, sodass nur pi darauf lesend zugreifen kann. z.B. mit chmod 600 .netrc.


    //Vergessen: Im Falle des Users pi wie im Beispiel, wäre der Pfad: /home/pi/.netrc ;)

  • OK....werd´s ausprobieren :danke_ATDE:


    Jetzt hätte ich da noch eine Frage....

    Die Daten vom Wechselrichter werden täglich in einer neuen Datei mit Datumsstempel abgespeichert (z.B. SMA_20171122.csv).

    Zusätzlich wird noch eine Monatsdatei angelegt, in der die täglichen Gesamterträge stehen (z.B. SMA_201711.csv).

    So wie es jetzt ist, werden ja alle csv-Dateien upgeloaded.

    Wie stelle ich es an, wenn ich z.B. nur die Dateien der letzten 2 Tage + die Monatsdatei uploaden möchte?

    Oder die Dateien der letzten x Tage + die Monatsdatei?

  • Weil es mich interessierte habe ich eben mal genauer nachgesehen wie es mit lftp funktioniert ohne das PWD in der Datei zu haben:

    Code
    1. lftp sftp://<USER>@<HOST> -e "cd $FTPDIR;ascii;put \"*.csv\";bye"

    und dann in der ~/.netrc

    Code
    1. machine <HOST>
    2. login <USER>
    3. password <PASSWORD>

    Et voilà :bravo2: das war's

    Hallo,

    Ich habe es auch so gemacht doch leider wird das Passwort immer noch verlangt, ausser das ich das ganze über ein Script Aufrufe. Was mache ich falsch? Die netrc liegt im home Ordner aber das Script liegt an einen anderen Ort.


    Nachtrag:

    Wenn ich den lftp sftp://..... aausserhalb des Scriptes ausführe funktioniert das ganze.

    Nur wenn ich das Script laufen lasse verlangt er wieder das Passwort.


    Würde mich über eure Hilfe freuen.


    Gruß

    Mister

    Edited 2 times, last by mister ().

  • Wie sieht denn Dein Script genau aus? ich denke da gibt es irgendein Problem.


    Ich habe mal testweise bei mir folgendes Script erstellt:


    Shell-Script
    1. #!/bin/bash
    2. lftp sftp://UID@HOST -e "pwd;ls;bye"


    mit entsprechendem Eintrag in der .netrc und alles funktioniert wenn ich das Script welches in einem Unterverzeichnis liegt aufrufe :conf:

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Torvalds, 28.9.2003

    >>> raspiBackup: Sichere Deine Raspberry regelmäßig im laufenden Betrieb <<<