¿Cómo transferir un archivo de Windows a un servidor Linux usando Samba Share?

¿Cómo transferir un archivo de Windows a un servidor Linux usando Samba Share?

Estoy enfrentando una pesadilla en el trabajo. Un colega responsable de lo que voy a describir a continuación me entregó esta responsabilidad y ahora dejó la organización. No tengo experiencia haciendo nada de esto. Disculpe mi falta de conocimiento y mi larga pregunta. No estoy seguro de qué información incluir/omitir.

Fondo

Obtenemos algunos datos de un tercero, que se envían a un servidor postgres y luego se llevan a un servidor Linux donde algunos scripts de shell realizan algunas transformaciones. Luego, el conjunto de datos se combina y luego se envía a una herramienta de análisis de datos que utilizamos. El proceso se automatiza mediante cron.

Sin embargo, cada año, necesitamos actualizar manualmente algunos archivos csv de metadatos en el servidor Linux [estos se combinan con datos de terceros mediante un script de shell].

Estructura de carpetas:

A continuación se muestra cómo se ve la estructura de carpetas del servidor Linux [se accede mediante PuTTY]:

  • otro proyecto
  • otro proyecto
  • mi proyecto
  • otro proyecto

~/mi_proyecto>

  • scripts_shell
  • archivos_adquiridos
  • meta_archivos
  • archivos_combinados

~/meta_archivos>

  • 2019.csv
  • 2020.csv
  • 2021.csv

Lo que necesito hacer

Lo que necesito hacer es agregar un archivo llamado2022.csva la carpeta meta_files. Tengo el archivo en mi sistema local. En el documento de entrega de mi colega, simplemente dice "copiar el archivo a Linux usando samba share". Encontré la ubicación para compartir samba y la configuré en mi explorador de Windows. Tiene una dirección que se parece a esta:\\smb.comp.com\prod. Hay varios tipos de carpetas aquí.

Sospecho que tengo que colocar el2022.csvarchivo en algún lugar del recurso compartido de samba y luego ejecute un comando en el servidor Linux usando PuTTY. Sin embargo, no tengo idea de dónde colocarlo ni qué comando ejecutar.

Pido disculpas nuevamente por una pregunta tan larga y la descripción excesiva. Cualquier ayuda sobre cómo puedo obtener el archivo 2022.csv en Linux sería muy apreciada. Por favor, avíseme si se requiere alguna otra información. Muchas gracias.

Respuesta1

Si ya está utilizando SSH para acceder al servidor Linux, hágalo al revés: conéctese al servidor Linux a través de SFTP para acceder directamentesubirel archivo. Generalmente, todos los servidores que aceptan SSH también aceptan conexiones SFTP.

  • PuTTY viene con los comandos pscpy psftp(que pueden usar sus claves SSH existentes y todo).

    C:\> pscp 2022.csv user@yourserver:~/my_project/meta_files/2022.csv
    
  • Las versiones recientes de Windows vienen con OpenSSH integrado, con los comandos scpy sftp. Su uso es similar a pscp/psftp.

  • WinSCP es un buen cliente SFTP gráfico, pero también tiene un modo CLI por lotes ( winscp.com) y un ensamblado .NET para automatización.

  • Para el uso manual de GUI, creo que Bitvise también tiene SFTP. FileZilla también servirá.

Pero si el servidor Linuxdebeextraiga el archivo del recurso compartido SMB; colóquelo donde desee y luego utilice un cliente SMB de Linux para acceder a él. Hay varios, por ejemplo:

  • El smbclientcomando de Samba. Bueno para trabajos únicos pero desagradable de automatizar:

    $ smbclient //smb.comp.com/prod -U someuser
    smbclient> get 2022.csv
    
  • Nivel de kernel smb3y cifsmontajes. Buena opción para la automatización, pero requiere privilegios de root en el sistema Linux para configurarlo por primera vez.

    $ sudo mount -t smb3 //smb.comp.com/prod /mnt/thesmbserver [options...]
    $ cp -av /mnt/thesmbserver/2022.csv ~/my_project/meta_files/
    $ sudo umount /mnt/thesmbserver
    

    (Si el recurso compartido SMB no es compatible con SMB3, utilice el cifstipo anterior).

  • Un script de Python personalizado que utiliza el módulo "python-smbprotocol". Bueno para la automatización:

    import os
    import shutil
    import smbclient
    import time
    
    thisyear = time.strftime("%Y")
    remote = r"\\smb.comp.com\prod\%s.csv" % thisyear
    local = os.path.expanduser("~/my_project/meta_files/%s.csv" % thisyear)
    
    with smbclient.open_file(remote, "rb") as remote_fh:
        with open(local, "wb") as local_fh:
            shutil.copyfileobj(remote_fh, local_fh)
    

(Tenemos varios cronjobs de Linux que usan python-smbprotocol para copiar archivosaServidores Windows y luego python-pypsrp para ejecutar comandos de forma remota en esos sistemas Windows).

información relacionada