GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo descargar archivos del servidor SFTP usando el script de python

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

  1. Configuración de python Env e instalación de pysftp
  2. Creación de la secuencia de comandos de Python
  3. 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/


Linux
  1. Cómo cargar o descargar archivos/directorios usando sFTP en Linux

  2. Cómo ejecutar scripts de Python desde shell

  3. ¿Cómo descargar un archivo del servidor usando SSH?

  4. ¿Cómo ejecutar el script de Python desde Java?

  5. ¿Cómo salir de la terminal de Linux usando el script de Python?

Cómo configurar un servidor de archivos básico usando simpleHTTPserver

Cómo descargar archivos desde servidores Linux remotos

Cómo sincronizar archivos de dos vías usando Osync Script en Linux

Cómo configurar la ejecución automática de un script de Python usando Systemd

Cómo:Comandos SFTP:transferir archivos de forma segura a un servidor remoto

Cómo conectarse a SQL Server desde Linux