GNU/Linux >> Linux Esercitazione >  >> Linux

Come scaricare file dal server SFTP utilizzando lo script python

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

  1. Configurazione di python Env e installazione di pysftp
  2. Creazione dello script Python
  3. 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/


Linux
  1. Come caricare o scaricare file/directory utilizzando sFTP in Linux

  2. Come si ftp e si scaricano file da uno script di shell UNIX

  3. Come faccio a scaricare i file dalla riga di comando usando il comando wget?

  4. Come faccio a scaricare un tarball da GitHub usando cURL?

  5. Come terminare il processo da Python usando pid?

Come configurare un file server di base utilizzando simpleHTTPserver

Come scaricare file da server Linux remoti

Come sincronizzare i file in due modi utilizzando Osync Script in Linux

Come configurare l'esecuzione automatica di uno script Python utilizzando Systemd

Procedura:Comandi SFTP – Trasferisci file in modo sicuro su un server remoto

Come connettersi a SQL Server da Linux