Mucha gente ha creado procesos automatizados para transferir archivos usando FTP. Hay varias maneras diferentes de hacer esto, algunas mejores que otras. Este blog discutirá los diferentes enfoques e identificará las ventajas y desventajas de cada uno. También cubrirá un tema que puede resultar en la transferencia de archivos incompletos.
El enfoque más simple es poner su ID de usuario, contraseña y todas sus solicitudes de FTP en un macro de comando (figura 1) y simplemente ejecutarlo (figura 2).
&attach_input |
Figura 1 - ftp1.cm - comando simple macro
ftp1 |
Figura 2 - ftp1.cm - ejecución de una macro de comando simple
El inconveniente de este enfoque es que su identificación de usuario y más importante aún, su contraseña están en texto claro como parte de la macro. Cualquiera que tenga acceso a la macro puede verla. El segundo enfoque es usar el archivo .netrc para guardar tu ID de usuario y tu contraseña. (figura 3). El comando macro (figura 4) entonces sólo incluye las solicitudes FTP para ejecutar (figura 5).
machine 172.16.1.116 |
Figura 3 - Archivo .netrc
&attach_input |
Figura 4 - ftp2.cm - comando macro sin ID de usuario y contraseña
ftp2 Connected to 172.16.1.116. |
Figura 5 - ftp2.cm - ejecutando comando macro sin ID de usuario y contraseña
El archivo .netrc sólo funciona si el propietario es el único que tiene acceso a él (figura 6). Si alguien más tiene acceso de lectura (figura 7) no funcionará y se mostrará un aviso de contraseña (figura 8).
display_access .netrc -all %phx_vos#m15_mas>SysAdmin>Noah_Davids>.netrc w Noah_Davids.* |
Figura 6 - ACLs correctos en el archivo .netrc
display_access .netrc -all %phx_vos#m15_mas>SysAdmin>Noah_Davids>.netrc w Noah_Davids.* |
Figura 7 - ACLs incorrectos en el archivo .netrc
ftp2 |
Figura 8 - aviso de contraseña cuando .netrc tiene los ACLs incorrectos
Puedes colocar todos los comandos en el archivo .netrc creando una macro FTP. Si la macro se llama "init" (figura 9) se ejecuta automáticamente después del inicio de sesión, esto hace que la macro del comando VOS tenga sólo 1 línea de longitud (figura 10), el comando ftp. El principal problema de este enfoque es que no hay recuperación de errores; no se puede comprobar el estado de ninguna de las solicitudes FTP con la función (command_status) (figura 11).
machine 172.16.1.116 |
Figura 9 - Archivo .netrc con macro de inicio
ftp 172.16.1.116 |
Figura 10 - ftp3.cm - macro cuando se usa con un archivo .netrc que contiene un macro FTP inicial
ftp3 |
Figura 11 - ftp3.cm - salida cuando se usa macro de inicio - no hay recuperación de errores
Muchas macros que he visto sólo hacen un bucle esperando que un archivo aparezca en un directorio, cuando lo hace la macro usa FTP para transferirlo (figura 12).
&attach_input &label AGAIN |
Figura 12 - ftp4.cm - macro esperando que aparezca un archivo y luego transferirlo
El problema con este enfoque es que el FTP puede leer un archivo que aún está abierto y en proceso de escritura. En el caso de un archivo grande o si el momento es malo, el resultado será que sólo se transferirá una parte del archivo (figura 13).
1234567890 |
Figura 13 - sólo una parte del archivo es transferida
1234567890 |
Figura 14 - archivo completo
No basta con comprobar si el archivo existe, también hay que comprobar si el archivo está bloqueado (figura 15).
&attach_input |
Figura 15 - ftp5.cm - comprobando que un archivo está desbloqueado antes de transferirlo
Así que el mejor enfoque es usar el archivo .netrc para guardar su ID de usuario y contraseña y un macro de comando VOS con la capacidad de comprobar el estado_de_comando después de cada solicitud para controlar las solicitudes reales. Además, antes de transferir un archivo, compruebe que no esté bloqueado.
Algunos de ustedes se preguntan sobre el SFTP; la automatización de las transferencias de archivos con SFTP es completamente diferente y se discutirá en mi próximo blog.