
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
pscp
ypsftp
(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
scp
ysftp
. 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
smbclient
comando de Samba. Bueno para trabajos únicos pero desagradable de automatizar:$ smbclient //smb.comp.com/prod -U someuser smbclient> get 2022.csv
Nivel de kernel
smb3
ycifs
montajes. 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
cifs
tipo 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).