SFTP in einem Cron-Job

SFTP in einem Cron-Job

Ausgabe

  1. Ich möchte den Download einer Datei über SFTP automatisieren
  2. Ich habe einen SFTP-Server und einen Verschlüsselungsmechanismus eingerichtet
  3. Ich habe ein einfaches Bash-Skript erstellt -Skript.sh
  4. Ich habe einen Eintrag in Cron für das Skript hinzugefügt

Das Drehbuch,Skript.sh:

#!/bin/bash  
sftp user@server:/home/user/file.txt  
exit 0

Das manuelle Ausführen des Skripts funktioniert einwandfrei (die Textdatei wird im Home-Verzeichnis gespeichert), aber das HinzufügenSkript.sh(mit den entsprechenden Berechtigungen) crontabtut nichts.

Der Crontab-Eintrag:

* * * * * /home/user/script.sh

Zur Authentifizierung habe ich ssh-keygeneinen Satz Schlüssel (privat, öffentlich) erstellt und eine Kreuzauthentifizierung zum SFTP-Server eingerichtet.

Für die Skriptautomatisierung habe ich keychaindie passwortlose Authentifizierung verwendet.

Momentan

Derzeit habe ich ein Skript namensSkript.shliegt in den"Benutzer"Home-Verzeichnis ( /home/user/).

Bei rootmanueller Ausführung ruft das Skript die Datei vom SFTP-Server ab und platziert sie in /home/user/.

Diese Aktion wird nicht ausgeführt, wenn der Befehl von einem cronJob aus ausgeführt wird. In tritt cronein sftpFehler auf.

Ideen?

Arbeiten daran

  1. WechselnHEIMVariable on /etc/crontabhat das Problem nicht gelöst
  2. Die Angabe vollständiger Pfade inSkript.shhat das Problem nicht gelöst
  3. FeststellungWEGVariable inSkript.shhat das Problem nicht gelöst
  4. Ich habe den Fehler aus dem sftpBefehl erkannt - es ist255

Die manuelle Ausführung des Skripts ( ./script.sh) funktioniert jedoch weiterhin einwandfrei ...

Antwort1

Ein funktionierendes Beispiel:

Ein einfaches Skript mit dem Namen hello.sh, das einer Textdatei das Wort „Hallo“ anhängt (verwendet vollständige Pfade für jeden Befehl):

Notiz myuserist der Name Ihres Benutzers

#!/bin/bash
printf 'hello' >> /home/myuser/hello.txt

Machen Sie das Skript ausführbar mitchmod +x hello.sh

Den minütlich laufenden Crontab-Eintrag können Sie Ihren Bedürfnissen entsprechend ändern:

* * * * * /home/myuser/hello.sh

Ein paar Details:

  • Jeder Cron-Job wird als der Benutzer ausgeführt, der ihn registriert hat. Wenn der Root-Benutzer einen Cron-Job registriert, wird dieser Job mit Root-Berechtigungen ausgeführt.

  • Wenn ein Nicht-Root-Benutzer einen Cron-Job registriert, wird dieser Job mit den Berechtigungen des oben genannten Benutzers ausgeführt. Wenn der Job Root-Berechtigungen erfordert, schlägt er fehl, weil er vom Nicht-Root-Benutzer initiiert wurde.

  • Rufen Sie Befehle und Skripte besser unter Verwendung der vollständigen Pfade auf, um sicherzugehen, dass Cron sie finden und korrekt aufrufen kann. Andernfalls schlägt das Programm möglicherweise fehl, ohne dass nützliches Feedback vorliegt.

verwandte Informationen