GNU/Linux >> Tutoriels Linux >  >> Linux

Comment télécharger des fichiers à partir du serveur SFTP à l'aide d'un script python

Qu'est-ce que sftp ?

SFTP (Secure File Transfer Protocol) est un protocole de transfert de fichiers qui exploite un ensemble d'utilitaires qui fournissent un accès sécurisé à un ordinateur distant pour fournir des communications sécurisées. Il s'appuie sur SSH.

Pourquoi récupérer des fichiers depuis sftp en utilisant python ?

La raison pour laquelle nous utilisons python pour cette tâche est que python est un langage de programmation puissant mais simple qui possède des modules riches fournissant les fonctionnalités que nous voulons atteindre. Cela nous permettra de réaliser ce que nous voulons faire plus rapidement.

Contenu associé
  • Comment travailler avec le client SFTP sous Linux – 10 commandes sftp
  • Comment configurer un serveur SFTP sur le serveur Debian 11
  • Télécharger des fichiers à partir du serveur SFTP à l'aide d'un script python
  • Répertorier, charger et télécharger des fichiers depuis un serveur SFTP à l'aide de golang
  • Comment configurer un serveur SFTP sur le serveur OpenSUSE Leap 15.3
  • Comment installer et configurer le serveur sftp dans Ubuntu 20.04
  • Comment configurer un serveur SFTP sur le serveur CentOS 8/RHEL 8

Prérequis

Pour suivre, assurez-vous :

  • Vous pouvez installer des packages Python sur votre système
  • Vous avez des connaissances de base en Python
  • Vous avez une connaissance de base de sftp
  • À l'aise avec le terminal. Nous allons taper quelques commandes.

Table des matières

  1. Configuration de python Env et installation de pysftp
  2. Création du script Python
  3. Configuration d'un cron pour exécuter le script

1. Configuration de python Env et installation de pysftp

Pour que nous puissions configurer et exécuter le script, nous devons importer un package qui implémente déjà la logique pour se connecter à un serveur sftp et effectuer les opérations nécessaires. Nous pouvons installer le package dans notre système Linux, mais la méthode recommandée consiste à utiliser un virtualenv python.

Un virtualenv Python est un outil qui vous permet d'isoler l'environnement de votre application afin que vous puissiez configurer ses dépendances sans entrer en conflit avec le système.

créer un environnement virtuel pour notre script

En Python 2, créez un environnement virtuel à l'aide de cette commande :

virtualenv sftpenv

Python 3 utilise des modules spécifiés à l'aide de -m drapeau. pour créer un virtualenv en utilisant le venv module, tapez cette commande :

python3 -m venv sftpenv

La commande ci-dessus créera un environnement virtuel dans notre système mais nous devrons l'activer. Utilisez la commande source pour activer l'environnement virtuel que nous venons de créer comme indiqué ci-dessous :

source sftpenv/bin/activate

Maintenant que le virtualenv est configuré, installez le pysftp dépendance avec cette commande :

pip install pysftp

2. Création du script python

Maintenant que l'environnement est configuré, créons un fichier que nous utiliserons pour ajouter le code.

vim get-files.py

Commençons par importer quelques dépendances. Utilisez cette commande :

#!/usr/bin/env python

import pysftp
import time

La directive en ligne 1 #!/usr/bin/env python indique au script d'utiliser la commande python lorsque nous exécutons get-files.py . Nous importons ensuite pysftp pour notre fonctionnalité et time comme dépendance dans notre code.

La section suivante crée une connexion. Nous encapsulons cela dans un bloc try catch afin de bien gérer les erreurs en cas d'échec de la connexion.

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

Avec la connexion, nous pouvons maintenant lister les fichiers ou répertoires ou obtenir le répertoire de travail.

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

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

Pour obtenir un seul fichier si vous connaissez le chemin, utilisez ceci :

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

Nous pouvons également utiliser la commande with :

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

Une meilleure façon de faire la récupération si nous ne connaissons pas le nom du fichier est de basculer dans ce répertoire, puis de lister les fichiers et pour chaque récupération.

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

C'est tout !

Voici le code complet :

#!/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. Configurer un cron pour exécuter le script

Maintenant que notre script est terminé, nous devons automatiser le processus de son exécution périodique.
Créons un cron qui s'exécute toutes les 3 heures du matin pour récupérer les fichiers et se connecter à /var/logs/scripts/file-fetcher.log

Pour initialiser cron :

crontab -e

Puis dans la fenêtre qui s'affiche :

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

Jusqu'ici, nous avons réussi à récupérer des fichiers à partir d'un serveur sftp.
Pour en savoir plus sur pysftp, consultez la documentation ici https://pysftp.readthedocs.io/en/release_0.2.9/


Linux
  1. Comment télécharger ou télécharger des fichiers/répertoires à l'aide de sFTP sous Linux

  2. Comment télécharger et charger des fichiers via SSH

  3. Comment télécharger plusieurs fichiers à la fois à l'aide de la commande Mget à partir du serveur FTP sans appuyer sur Y à chaque fois ?

  4. Comment télécharger une archive tar depuis GitHub à l'aide de cURL ?

  5. Comment terminer le processus de Python en utilisant pid?

Comment configurer un serveur de fichiers de base à l'aide de simpleHTTPserver

Comment télécharger des fichiers à partir de serveurs Linux distants

Comment synchroniser des fichiers dans les deux sens à l'aide du script Osync sous Linux

Comment configurer l'exécution automatique d'un script Python à l'aide de Systemd

Procédure :Commandes SFTP - Transférer en toute sécurité des fichiers vers un serveur distant

Comment se connecter à SQL Server à partir de Linux