Estoy trabajando en un proyecto en el que varias Raspberry Pis recopilan datos de sensores y los registran en varios archivos, varias veces al día. Quería escribir un pequeño script para cargar todos esos archivos a un servidor FTP al final del día con crontab. Entonces escribí un script usando lftp que funcionó al principio pero luego comenzó a mostrar un error.
A continuación se muestra el script y la salida detallada. ¿Cómo puedo arreglarlo?
#!/bin/bash
HOST='ftp://xyz.com'
USER='xxxxxx'
PASS='xxxxxx'
TARGETFOLDER='/home/xxxx'
SOURCEFOLDER='/home/pi/yyyy'
lftp -f "
open $HOST
user $USER $PASS
debug -o lftp_debug.txt
lcd $SOURCEFOLDER
mirror --reverse --delete --verbose $SOURCEFOLDER $TARGETFOLDER
bye
"
producción:
---- Connecting to xyz.com (xx.xx.xx.xx) port 21
<--- 220 (vsFTPd 3.0.3)
---> FEAT
<--- 211-Features:
<--- EPRT
<--- EPSV
<--- MDTM
<--- PASV
<--- REST STREAM
<--- SIZE
<--- TVFS
<--- 211 End
---> USER XXXX
<--- 331 Please specify the password.
---> PASS XXXX
<--- 230 Login successful.
---> PWD
<--- 257 "/home/XXXX" is the current directory
---> MKD /home
<--- 550 Create directory operation failed.
---> MKD /home/XXXX
<--- 550 Create directory operation failed.
---- CWD path to be sent is `/home/XXXX'
---> CWD /home/XXXX
<--- 250 Directory successfully changed.
---> PASV
**** control-socket: Connection reset by peer
---- Closing data socket
---- Closing control socket
##ACTUALIZACIÓN 2##
Lo curioso es que cuando inicio sesión en el mismo servidor FTP a través del comando 'FTP' con el mismo usuario y paso, funciona de maravilla, pero cuando inicio sesión lftp
con el mismo usuario y paso, pude iniciar sesión en el servidor, pero tan pronto Cuando doy ls
el comando, muestra el siguiente resultado.
lftp [email protected]:~> ls
`ls' at 0 [Delaying before reconnect: 24]
##ACTUALIZACIÓN 3##
Intenté usar SFTP y funcionó correctamente. Espero que esto le ahorre tiempo a alguien.
Respuesta1
No utilice ftp. El problema que tiene probablemente esté relacionado con la confusión general sobre la dirección de la conexión en FTP. FTP utiliza dos puertos: una conexión de comando y una conexión de datos. Tradicionalmente, la conexión de comandos era de cliente a servidor y la conexión de datos de servidor a cliente.
PASV es lo contrario; le indica al servidor que escuche la conexión de datos del cliente y le diga al cliente su número de puerto. Parece que este comportamiento (inesperado para muchos) es lo que te está molestando.
Sin embargo, en mi opinión, seguir utilizando FTP no es una buena alternativa a día de hoy. Está simplemente desactualizado, en cuanto a seguridad y protocolo.
Tienes varias alternativas al FTP. Si utiliza autenticación, scp/sftp es una buena alternativa. Requiere exactamente un puerto, está autenticado y cifrado.
Si necesita envíos anónimos, http(s) es una buena alternativa. Ya sea mediante una solicitud POST, o con WebDAV. http puedetambiénPuede configurarse para utilizar autenticación y puede cifrarse con TLS (https). También abre un solo canal para datos y comandos.
FTP es un protocolo de 40 años. Está cayendo en desuso y, como consecuencia, el software no recibe tanta atención como los servidores web y servidores ssh más populares y, por lo tanto, existe una mayor probabilidad de que sobrevivan vulnerabilidades graves en el código fuente.
Además, el comando para SCP sería mucho más simple: scp * $user@$host:$targetfolder
- ¡y podría usar autenticación basada en claves para evitar contraseñas en el script!