GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So laden Sie Dateien vom SFTP-Server mit Python-Skript herunter

Also, was ist sftp?

SFTP (Secure File Transfer Protocol) ist ein Dateiübertragungsprotokoll, das eine Reihe von Dienstprogrammen nutzt, die einen sicheren Zugriff auf einen Remote-Computer ermöglichen, um eine sichere Kommunikation zu ermöglichen. Es basiert auf SSH.

Warum Dateien von SFTP mit Python abrufen?

Der Grund, warum wir Python für diese Aufgabe verwenden, ist, dass Python eine leistungsstarke und dennoch einfache Programmiersprache ist, die über einige umfangreiche Module verfügt, die die Funktionalität bieten, die wir erreichen möchten. Dadurch können wir unsere Ziele schneller erreichen.

Verwandte Inhalte
  • Arbeiten mit dem SFTP-Client unter Linux – 10 sftp-Befehle
  • So richten Sie einen SFTP-Server auf Debian 11 Server ein
  • Dateien vom SFTP-Server mit einem Python-Skript herunterladen
  • Auflisten, Hochladen und Herunterladen von Dateien von einem SFTP-Server mit Golang
  • So richten Sie einen SFTP-Server auf OpenSUSE Leap 15.3 Server ein
  • So installieren und konfigurieren Sie den sftp-Server in Ubuntu 20.04
  • So richten Sie einen SFTP-Server auf CentOS 8 /RHEL 8 Server ein

Voraussetzungen

Stellen Sie Folgendes sicher, um mitzumachen:

  • Sie können Python-Pakete in Ihrem System installieren
  • Sie verfügen über Grundkenntnisse in Python
  • Sie verfügen über grundlegende sftp-Kenntnisse
  • Bequem mit dem Terminal. Wir werden einige Befehle eingeben.

Inhaltsverzeichnis

  1. Python Env einrichten und pysftp installieren
  2. Das Python-Skript erstellen
  3. Einen Cron einrichten, um das Skript auszuführen

1. Python Env einrichten und pysftp installieren

Damit wir das Skript einrichten und ausführen können, müssen wir ein Paket importieren, das bereits Logik implementiert, um sich bei einem sftp-Server anzumelden und die erforderlichen Operationen auszuführen. Wir können das Paket in unserem Linux-System installieren, aber der empfohlene Weg ist die Verwendung einer Python-Virtualenv.

Eine Python-Virtualenv ist ein Tool, das Ihnen eine isolierte Umgebung für Ihre Anwendung ermöglicht, sodass Sie ihre Abhängigkeiten einrichten können, ohne mit dem System in Konflikt zu geraten.

Virtuelle Umgebung für unser Skript erstellen

Erstellen Sie in Python 2 mit diesem Befehl eine virtuelle Umgebung:

virtualenv sftpenv

Python 3 verwendet Module, die mit -m angegeben werden Flagge. um eine virtuelle Umgebung mit dem venv zu erstellen geben Sie diesen Befehl ein:

python3 -m venv sftpenv

Der obige Befehl erstellt eine virtuelle Umgebung in unserem System, aber wir müssen sie aktivieren. Verwenden Sie den Quellbefehl, um die virtuelle Umgebung zu aktivieren, die wir gerade erstellt haben, wie unten gezeigt:

source sftpenv/bin/activate

Nachdem die virtuelle Umgebung eingerichtet ist, installieren Sie pysftp Abhängigkeit mit diesem Befehl:

pip install pysftp

2. Erstellen des Python-Skripts

Nachdem die Umgebung nun eingerichtet ist, erstellen wir eine Datei, die wir verwenden, um den Code hinzuzufügen.

vim get-files.py

Lassen Sie uns zunächst einige Abhängigkeiten importieren. Verwenden Sie diesen Befehl:

#!/usr/bin/env python

import pysftp
import time

Die Direktive in Zeile 1 #!/usr/bin/env python weist das Skript an, den Python-Befehl zu verwenden, wenn wir get-files.py ausführen . Wir importieren dann pysftp für unsere Funktionalität und time als Abhängigkeit in unserem Code.

Im nächsten Abschnitt wird eine Verbindung erstellt. Wir kapseln dies in einen Try-Catch-Block, damit wir Fehler gut handhaben, wenn die Verbindung fehlschlägt.

try:
    print("connecting to %s as %s" % (host, username))
    conn = pysftp.Connection(
      host=host,
      port=port,
      username=username,
      password=password,
    )
    print("connection established successfully: ", conn)
except Exception:
  print('failed to establish connection to targeted server')

Mit der Verbindung können wir nun die Dateien oder Verzeichnisse auflisten oder das Arbeitsverzeichnis abrufen.

current_dir = conn.pwd
print('our current working directory is: ', current_dir)

print('available list of directories: ', conn.listdir())

Um eine einzelne Datei zu erhalten, wenn Sie den Pfad kennen, verwenden Sie Folgendes:

conn.get('/paymentfiles/09282021/TRXN_HIST_RPT_PARTNER-V0001.CSV')

Wir können auch den with-Befehl verwenden:

with conn.cd('/paymentfiles/09282021/'):
    conn.get('TRXN_HIST_RPT_PARTNER-V0001.CSV')

Ein besserer Weg, den Abruf durchzuführen, wenn wir den Dateinamen nicht kennen, besteht darin, in dieses Verzeichnis zu wechseln und dann die Dateien aufzulisten und für jeden Abruf.

with conn.cd('/paymentfiles/09282021/'):
    files = conn.listdir()
    for file in files:
        conn.get(file)

Das ist alles!

Hier ist der vollständige Code:

#!/usr/bin/env python

import pysftp
import time

host = '10.2.11.50'
port = 22
username = 'citizix_user'
password= 'str0NgP45sword'

try:
    print("connecting to %s as %s" % (host, username))
    conn = pysftp.Connection(
      host=host,
      port=port,
      username=username,
      password=password,
    )
    print("connection established successfully: ", conn)
except Exception:
  print('failed to establish connection to targeted server')

current_dir = conn.pwd
print('our current working directory is: ', current_dir)

print('available list of directories: ', conn.listdir())

dlfiles = []
with conn.cd('/paymentfiles/09282021/'):
    files = conn.listdir()
    for file in files:
        conn.get(file)
        dlfiles.append(file)
        print(file, ' downloaded successfully ')

print("These files were downloades ", dlfiles)

3. Einrichten eines Crons zum Ausführen des Skripts

Jetzt, da unser Skript fertig ist, müssen wir den Prozess der regelmäßigen Ausführung automatisieren.
Erstellen wir einen Cron, der alle 3 Uhr morgens ausgeführt wird, die Dateien abruft und sich in /var/logs/scripts/file-fetcher.log

Cron initialisieren:

crontab -e

Dann im erscheinenden Fenster:

17 03 * * * /opt/scripts/get-files.py > /var/logs/scripts/file-fetcher.log

Bis hierher konnten wir Dateien von einem sftp-Server abrufen.
Um mehr über pysftp zu erfahren, lesen Sie die Dokumentation hier https://pysftp.readthedocs.io/en/release_0.2.9/


Linux
  1. Herunterladen und Hochladen von Dateien über SSH

  2. Wie kann ich Dateien aus einem UNIX-Shell-Skript per FTP übertragen und herunterladen?

  3. wget vs curl:So laden Sie Dateien mit wget und curl herunter

  4. Wie lade ich mit cURL einen Tarball von GitHub herunter?

  5. Wie lade ich eine Datei mit SSH vom Server herunter?

So richten Sie einen einfachen Dateiserver mit simpleHTTPserver ein

So laden Sie Dateien von Remote-Linux-Servern herunter

So synchronisieren Sie Dateien in zwei Richtungen mit Osync-Skript in Linux

So richten Sie die automatische Ausführung eines Python-Skripts mit Systemd ein

Gewusst wie:SFTP-Befehle – Dateien sicher auf einen Remote-Server übertragen

So stellen Sie von Linux aus eine Verbindung zu SQL Server her