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
- Nastavení python Env a instalace pysftp
- Vytvoření skriptu python
- 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/