En esta oportunidad les vamos a mostrar como en menos de 5 minutos podes tener un servidor Servidor SFTP sobre Docker. Sin muchas vueltas, por que verdaderamente el docker-compose.yml es muy sencillo sobre todo si venis viendo los tutoriales sobre docker que vamos ingresando poco a poco tanto desde #Portainer o desde la terminal con el compose como les venia comentando.

sftp

Como indicamos en el titulo de la entrada vamos a mostrar como montar un Servidor SFTP sobre Docker sin embargo, como para hacerlo más entendible vamos a explicar un poquito.

FTP: El Protocolo de transferencia de archivos (en inglés File Transfer Protocol o FTP) es un protocolo de red para la transferencia de archivos entre sistemas conectados a una red TCP (Transmission Control Protocol), basado en la arquitectura cliente-servidor lo cual quiere decir que necesito un SERVIDOR FTP para que mis clientes se conecten y descarguen o carguen archivos.

Ahora si le agregamos la S (SFTP) veriamos que es lo mismo pero basado en SSH.

La principal diferencia entre FTP y SFTP es la seguridad.

SSH es una forma segura de proporcionar acceso a todas las cuentas de shell en el servidor remoto. Otra diferencia principal de ellos es que FTP es el protocolo de archivo más utilizado y SSFP no se usa comúnmente, sin embargo este ultimo es más usados por los administradores de sistemas por su seguridad!

SFTP proporciona dos métodos para autenticar conexiones.

En FTP, generalmente utilizamos simplemente un ID de usuario o contraseña. Sin embargo, con SFTP estas credenciales están encriptadas, lo que otorga una ventaja de seguridad mayor que FTP. El otro método de autenticación que puede utilizar con SFTP son las claves SSH. Esto incluye, primero, generar una clave SSH privada y una pública. Luego envíamos nuestra clave SSH pública al servidor y la asociamos a nuestra cuenta. El software cliente transmitirá la clave pública y si la clave pública coincide con su clave privada, junto con cualquier usuario o contraseña proporcionada, entonces la autenticación será exitosa.

ftp entre cliente y servidor
Comunicación FTP
sftp
Comunicación SFTP

Bien ahora que sabemos intentamos reparar un poquito sobre lo que es ftp y sftp (uds pueden buscar mas info en la wiki) vamos a continuar con nuestra entrada: Servidor SFTP sobre Docker

sftp:
    image: atmoz/sftp
    volumes:
      - ./storage:/home/user/storage
    ports:
      - "2222:22"
    command: user:password:1000

Listo ya esta! yo les dije……. es tan tan tan tan lindo docker! Bueno para explicar un poco mas. Si ya venis mirando los tutoriales sobre #Docker que venimos mostrando tenes que crearte el archivo docker-compose.yml o agregar al que ya tengas creado este nuevo servicio. Vamos a utilizar la imagen:

En la documentación encontraran un sin fin de características pero con esto ya tendrán su sftp funcionando para uds seguro y bonito!

Para que no hayan llegado acá sin más después de tanta charla, pueden instalar la libreria de python3 pysftp la cual nos va a ayudar, en el caso de que tengamos un #bot con #telegram para hacer algunas cosillas!!

python3 -m pip install pysftp

Ejemplos de uso de pysftp

Listar archivos en un directorio:

A continuación veras un código que te facilita listar el contenido de un directorio. Después de abrir una conexión, necesitas cambiar de directorio usando ya sea el método cwd o chdir y pasando como primer argumento la dirección del directorio remoto:

import pysftp

serversftp = "luiszambrana.com.ar"
usuario = "pi"
contra = "12345"

with pysftp.Connection(host=serverftp, username=usuario, password=contra) as sftp:
    print "Connection succesfully stablished ... "

    # Cambiar a directorio remoto
    sftp.cwd('/var/www/vhosts/')

    # Obtener estructura del directorio '/var/www/vhosts'
    directory_structure = sftp.listdir_attr()

    # Imprimir información
    for attr in directory_structure:
        print attr.filename, attr
    
# La conexión se cierra automáticamente al final del bloque with

Descargar archivo remoto

Para descargar un archivo remoto, abriremos una conexión y de la instancia SFTP usa el método get que espera como primer argumento el directorio absoluto del archivo que va a ser descargado y como segundo argumento el directorio local donde se guardará el archivo descargado:

import pysftp

serversftp = "luiszambrana.com.ar"
usuario = "pi"
contra = "12345"

with pysftp.Connection(host=serversftp, username=usuario, password=contra) as sftp:
    print "Connection succesfully stablished ... "

    # Define el archivo que quieres descargar del servidor
    remoteFilePath = '/var/luisweb/prueba.txt'

    # Define el directorio local donde se debería guardar el archivo
    # o absoluto "/home/luisito/Escritorio/"
    localFilePath = './prueba.txt'

    sftp.get(remoteFilePath, localFilePath)
 
# conexión se cierra automaticamente al final del bloque with

Mas adelante veremos mucho mas sobre python, bot, telegram y sftp! Por ahora espero que les haya gustado esta entrada donde vimos de todo un poco y ademas pudimos crear un Servidor SFTP sobre Docker

Print Friendly, PDF & Email
Share:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *