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
- Python Env einrichten und pysftp installieren
- Das Python-Skript erstellen
- 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/