Quindi cos'è sftp?
SFTP (Secure File Transfer Protocol) è un protocollo di trasferimento file che sfrutta una serie di utilità che forniscono un accesso sicuro a un computer remoto per fornire comunicazioni sicure. Si basa su SSH.
Perché recuperare i file da sftp usando python?
Il motivo per cui stiamo usando python per questa attività è perché python è un linguaggio di programmazione potente ma semplice che ha alcuni moduli ricchi che forniscono le funzionalità che vogliamo ottenere. Questo ci consentirà di ottenere ciò che vogliamo fare più velocemente.
Contenuti correlati
- Come lavorare con il client SFTP in Linux – 10 comandi sftp
- Come configurare un server SFTP su Debian 11 Server
- Scarica file dal server SFTP utilizzando uno script python
- Elenca, carica e scarica file da un server SFTP utilizzando golang
- Come configurare un server SFTP su OpenSUSE Leap 15.3 Server
- Come installare e configurare il server sftp in Ubuntu 20.04
- Come configurare un server SFTP su CentOS 8 /RHEL 8 Server
Prerequisiti
Per seguire, assicurati:
- Puoi installare pacchetti python nel tuo sistema
- Hai una conoscenza di base di Python
- Hai una conoscenza di base di sftp
- Comodo con il terminale. Digiteremo alcuni comandi.
Indice dei contenuti
- Configurazione di python Env e installazione di pysftp
- Creazione dello script Python
- Configurazione di un cron per eseguire lo script
1. Configurazione di Python Env e installazione di pysftp
Per poter impostare ed eseguire lo script, dobbiamo importare un pacchetto che implementa già la logica per accedere a un server sftp ed eseguire le operazioni necessarie. Possiamo installare il pacchetto nel nostro sistema linux ma il modo consigliato è usare un virtualenv python.
Un virtualenv Python è uno strumento che ti consente un ambiente isolato per la tua applicazione in modo da poter impostare le sue dipendenze senza entrare in conflitto con il sistema.
creazione dell'ambiente virtuale per il nostro script
In Python 2, crea un ambiente virtuale usando questo comando:
virtualenv sftpenv
Python 3 usa moduli specificati usando -m
bandiera. per creare un virtualenv usando venv
modulo, digita questo comando:
python3 -m venv sftpenv
Il comando precedente creerà un ambiente virtuale nel nostro sistema ma dovremo abilitarlo. Usa il comando source per attivare l'ambiente virtuale che abbiamo appena creato come mostrato di seguito:
source sftpenv/bin/activate
Ora che virtualenv è impostato, installa pysftp
dipendenza con questo comando:
pip install pysftp
2. Creazione dello script Python
Ora che l'ambiente è impostato, creiamo un file che useremo per aggiungere il codice.
vim get-files.py
Per prima cosa importiamo alcune dipendenze. Usa questo comando:
#!/usr/bin/env python
import pysftp
import time
La direttiva nella riga 1 #!/usr/bin/env python
indica allo script di utilizzare il comando python quando eseguiamo get-files.py
. Quindi importiamo pysftp
per la nostra funzionalità e time
come dipendenza nel nostro codice.
La prossima sezione sta creando una connessione. Lo incapsulamo in un blocco try catch in modo da gestire bene gli errori se la connessione fallisce.
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')
Con la connessione, ora possiamo elencare i file o le directory o ottenere la directory di lavoro.
current_dir = conn.pwd
print('our current working directory is: ', current_dir)
print('available list of directories: ', conn.listdir())
Per ottenere un singolo file se conosci il percorso, usa questo:
conn.get('/paymentfiles/09282021/TRXN_HIST_RPT_PARTNER-V0001.CSV')
Possiamo anche usare il comando with:
with conn.cd('/paymentfiles/09282021/'):
conn.get('TRXN_HIST_RPT_PARTNER-V0001.CSV')
Un modo migliore per eseguire il recupero se non conosciamo il nome del file è passare a quella directory, quindi elencare i file e per ogni recupero.
with conn.cd('/paymentfiles/09282021/'):
files = conn.listdir()
for file in files:
conn.get(file)
Questo è tutto!
Ecco il codice completo:
#!/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. Configurazione di un cron per eseguire lo script
Ora che il nostro script è terminato, dobbiamo automatizzare il processo di esecuzione periodica.
Creiamo un cron che venga eseguito ogni 3 del mattino per recuperare i file e accedere a /var/logs/scripts/file-fetcher.log
Per avviare cron:
crontab -e
Quindi nella finestra che appare:
17 03 * * * /opt/scripts/get-files.py > /var/logs/scripts/file-fetcher.log
Fino a qui siamo riusciti a recuperare i file da un server sftp.
Per controllare di più su pysftp, consulta i documenti qui https://pysftp.readthedocs.io/en/release_0.2.9/