GNU/Linux >> Znalost Linux >  >> Linux

Jak stahovat soubory ze serveru SFTP pomocí skriptu python

Co je tedy sftp?

SFTP (Secure File Transfer Protocol) je protokol pro přenos souborů, který využívá sadu nástrojů, které poskytují bezpečný přístup ke vzdálenému počítači pro zajištění bezpečné komunikace. Spoléhá na SSH.

Proč načítat soubory ze sftp pomocí pythonu?

Důvod, proč pro tento úkol používáme python, je ten, že python je výkonný, ale jednoduchý programovací jazyk, který má některé bohaté moduly poskytující funkce, kterých chceme dosáhnout. To nám umožní rychleji dosáhnout toho, co chceme.

Související obsah
  • Jak pracovat s klientem SFTP v systému Linux – 10 příkazů sftp
  • Jak nastavit server SFTP na serveru Debian 11
  • Stahování souborů ze serveru SFTP pomocí skriptu python
  • Seznam, nahrávání a stahování souborů ze serveru SFTP pomocí golang
  • Jak nastavit server SFTP na serveru OpenSUSE Leap 15.3
  • Jak nainstalovat a nastavit sftp server v Ubuntu 20.04
  • Jak nastavit server SFTP na serveru CentOS 8 /RHEL 8

Předpoklady

Chcete-li pokračovat, ujistěte se:

  • Do svého systému můžete nainstalovat balíčky pythonu
  • Máte základní znalosti jazyka Python
  • Máte základní znalosti sftp
  • Pohodlné s terminálem. Napíšeme nějaké příkazy.

Obsah

  1. Nastavení python Env a instalace pysftp
  2. Vytvoření skriptu python
  3. Nastavení cronu pro spuštění skriptu

1. Nastavení python Env a instalace pysftp

Abychom mohli skript nastavit a spustit, musíme importovat balíček, který již implementuje logiku pro přihlášení k serveru sftp a provedení nezbytných operací. Balíček můžeme nainstalovat do našeho linuxového systému, ale doporučeným způsobem je použít python virtualenv.

Python virtualenv je nástroj, který umožňuje izolované prostředí pro vaši aplikaci, takže můžete nastavit její závislosti bez konfliktu se systémem.

vytvoření virtuálního prostředí pro náš skript

V Pythonu 2 vytvořte virtuální prostředí pomocí tohoto příkazu:

virtualenv sftpenv

Python 3 používá moduly, které jsou specifikovány pomocí -m vlajka. k vytvoření virtualenv pomocí venv modulu, zadejte tento příkaz:

python3 -m venv sftpenv

Výše uvedený příkaz vytvoří v našem systému virtuální prostředí, ale budeme ho muset povolit. Pomocí příkazu source aktivujte virtuální prostředí, které jsme právě vytvořili, jak je znázorněno níže:

source sftpenv/bin/activate

Nyní, když je virtualenv nastaveno, nainstalujte pysftp závislost s tímto příkazem:

pip install pysftp

2. Vytvoření skriptu python

Nyní, když je prostředí nastaveno, vytvořte soubor, který použijeme k přidání kódu.

vim get-files.py

Nejprve importujme některé závislosti. Použijte tento příkaz:

#!/usr/bin/env python

import pysftp
import time

Direktiva na řádku 1 #!/usr/bin/env python dává skriptu pokyn, aby použil příkaz python, když spustíme get-files.py . Poté importujeme pysftp pro naši funkčnost a time jako závislost v našem kódu.

Další částí je vytvoření připojení. Toto zapouzdřujeme do bloku try catch, takže chyby v případě selhání připojení zvládneme dobře.

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')

S připojením nyní můžeme vypsat soubory nebo adresáře nebo získat pracovní adresář.

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

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

Chcete-li získat jeden soubor, pokud znáte cestu, použijte toto:

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

Můžeme také použít příkaz with:

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

Lepší způsob, jak provést načtení, pokud neznáme název souboru, je přepnout se do tohoto adresáře a poté vypsat soubory a pro každé načtení.

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

To je vše!

Zde je úplný kód:

#!/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. Nastavení cronu pro spuštění skriptu

Nyní, když je náš skript hotový, musíme zautomatizovat proces jeho pravidelného spouštění.
Pojďme vytvořit cron, který se bude spouštět každé 3 hodiny ráno, načte soubory a přihlásí se do /var/logs/scripts/file-fetcher.log

Spuštění cronu:

crontab -e

Poté v okně, které se objeví:

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

Až sem se nám podařilo načíst soubory ze serveru sftp.
Chcete-li zjistit více o pysftp, podívejte se na dokumenty zde https://pysftp.readthedocs.io/en/release_0.2.9/


Linux
  1. Jak nahrávat nebo stahovat soubory/adresáře pomocí sFTP v Linuxu

  2. Jak stahovat více souborů najednou pomocí příkazu Mget z FTP serveru, aniž byste museli pokaždé stisknout Y?

  3. Jak spouštět skripty Pythonu ze shellu

  1. Jak stahovat a nahrávat soubory přes SSH

  2. Jak vypisovat, nahrávat a stahovat soubory ze serveru SFTP pomocí golang

  3. Jak mohu ftp a stáhnout soubory ze skriptu prostředí UNIX

  1. wget vs curl:Jak stahovat soubory pomocí wget a curl

  2. Jak stáhnu soubory z příkazového řádku pomocí příkazu wget?

  3. Jak si stáhnu tarball z GitHubu pomocí cURL?