Entonces, ¿qué es sftp?
SFTP (Protocolo de transferencia segura de archivos) es un protocolo de transferencia de archivos que aprovecha un conjunto de utilidades que brindan acceso seguro a una computadora remota para brindar comunicaciones seguras. Se basa en SSH.
¿Por qué obtener archivos de sftp usando python?
La razón por la que usamos python para esta tarea es porque python es un lenguaje de programación poderoso pero simple que tiene algunos módulos ricos que brindan la funcionalidad que queremos lograr. Esto nos permitirá lograr lo que queremos hacer más rápido.
Contenido relacionado
- Cómo trabajar con el cliente SFTP en Linux:10 comandos sftp
- Cómo configurar un servidor SFTP en el servidor Debian 11
- Descargar archivos desde el servidor SFTP utilizando un script de python
- Enumere, cargue y descargue archivos desde un servidor SFTP usando golang
- Cómo configurar un servidor SFTP en OpenSUSE Leap 15.3 Server
- Cómo instalar y configurar el servidor sftp en Ubuntu 20.04
- Cómo configurar un servidor SFTP en CentOS 8/RHEL 8 Server
Requisitos
Para seguir, asegúrese de:
- Puede instalar paquetes de python en su sistema
- Tienes conocimientos básicos de Python
- Tiene conocimientos básicos de sftp
- Cómodo con la terminal. Escribiremos algunos comandos.
Tabla de contenido
- Configuración de python Env e instalación de pysftp
- Creación de la secuencia de comandos de Python
- Configurar un cron para ejecutar el script
1. Configurando python Env e instalando pysftp
Para que podamos configurar y ejecutar el script, necesitamos importar un paquete que ya implemente la lógica para iniciar sesión en un servidor sftp y realizar las operaciones necesarias. Podemos instalar el paquete en nuestro sistema Linux, pero la forma recomendada es usar un virtualenv de python.
Un virtualenv de Python es una herramienta que le permite un entorno aislado para su aplicación para que pueda configurar sus dependencias sin entrar en conflicto con el sistema.
creando un entorno virtual para nuestro script
En Python 2, crea un entorno virtual usando este comando:
virtualenv sftpenv
Python 3 usa módulos que se especifican usando -m
bandera. para crear un virtualenv usando el venv
módulo, escriba este comando:
python3 -m venv sftpenv
El comando anterior creará un entorno virtual en nuestro sistema, pero necesitaremos habilitarlo. Use el comando fuente para activar el entorno virtual que acabamos de crear como se muestra a continuación:
source sftpenv/bin/activate
Ahora que virtualenv está configurado, instale pysftp
dependencia con este comando:
pip install pysftp
2. Creando el script de python
Ahora que el entorno está configurado, creemos un archivo que usaremos para agregar el código.
vim get-files.py
Primero vamos a importar algunas dependencias. Usa este comando:
#!/usr/bin/env python
import pysftp
import time
La directiva en la línea 1 #!/usr/bin/env python
le indica al script que use el comando python cuando ejecutamos get-files.py
. Luego importamos pysftp
para nuestra funcionalidad y time
como una dependencia en nuestro código.
La siguiente sección es crear una conexión. Encapsulamos esto en un bloque try catch para manejar bien los errores si falla la conexión.
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 conexión, ahora podemos listar los archivos o directorios u obtener el directorio de trabajo.
current_dir = conn.pwd
print('our current working directory is: ', current_dir)
print('available list of directories: ', conn.listdir())
Para obtener un solo archivo si conoce la ruta, use esto:
conn.get('/paymentfiles/09282021/TRXN_HIST_RPT_PARTNER-V0001.CSV')
También podemos usar el comando with:
with conn.cd('/paymentfiles/09282021/'):
conn.get('TRXN_HIST_RPT_PARTNER-V0001.CSV')
Una mejor manera de hacer la recuperación si no sabemos el nombre del archivo es cambiar a ese directorio y luego enumerar los archivos y para cada recuperación.
with conn.cd('/paymentfiles/09282021/'):
files = conn.listdir()
for file in files:
conn.get(file)
¡Eso es todo!
Aquí está el código 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. Configurando un cron para ejecutar el script
Ahora que nuestro script está listo, necesitamos automatizar el proceso de ejecutarlo periódicamente.
Vamos a crear un cron que se ejecute cada 3 a. m. para obtener los archivos e iniciar sesión en /var/logs/scripts/file-fetcher.log
Para iniciar cron:
crontab -e
Luego en la ventana que aparece:
17 03 * * * /opt/scripts/get-files.py > /var/logs/scripts/file-fetcher.log
Hasta aquí logramos obtener archivos de un servidor sftp.
Para ver más sobre pysftp, consulte los documentos aquí https://pysftp.readthedocs.io/en/release_0.2.9/