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
- Configuration de python Env et installation de pysftp
- Création du script Python
- 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/