SFTP en un trabajo cron

SFTP en un trabajo cron

Asunto

  1. Quiero automatizar la descarga de un archivo vía SFTP
  2. Configuré un servidor SFTP y un mecanismo de claves.
  3. He creado un script bash simple:script.sh
  4. Agregué una entrada en cron para el script.

La secuencia de comandos,script.sh:

#!/bin/bash  
sftp user@server:/home/user/file.txt  
exit 0

Ejecutar el script manualmente funciona bien (el archivo de texto se guarda en el directorio de inicio), pero agregarscript.sh(con los permisos adecuados) para crontabno hacer nada.

La entrada de crontab:

* * * * * /home/user/script.sh

Para la autenticación, solía ssh-keygencrear un conjunto de claves (privada, pública) y configurar la autenticación cruzada en el servidor SFTP.

Para la automatización de scripts utilicé keychainla autenticación sin contraseña.

Actualmente

Actualmente tengo un script llamadoscript.shubicado en el"usuario"directorio de inicio ( /home/user/).

Cuando se ejecuta rootmanualmente, el script obtiene el archivo del servidor SFTP y lo coloca en formato /home/user/.

No realiza esta acción cuando se ejecuta desde un crontrabajo. En cron, el sftpcomando recibe un error.

¿Ideas?

Trabajando en ello

  1. Cambiando elHOGARLa variable activada /etc/crontabno resolvió el problema.
  2. Indicando rutas completas enscript.shno resolvió el problema
  3. declarandoCAMINOvariables enscript.shno resolvió el problema
  4. Capté el error del sftpcomando: es255

Sin embargo , ejecutar el script manualmente ( ./script.sh) todavía funciona perfectamente...

Respuesta1

Un ejemplo práctico:

un script simple llamado hello.shque agrega a un archivo de texto la palabra hola (usa rutas completas para cada comando):

nota myuseres el nombre de tu usuario

#!/bin/bash
printf 'hello' >> /home/myuser/hello.txt

Haga que el script sea ejecutable usandochmod +x hello.sh

La entrada de crontab que se ejecuta cada minuto puede cambiarla según sus necesidades:

* * * * * /home/myuser/hello.sh

Algunos detalles:

  • Cada trabajo cron se ejecuta como el usuario que lo registró. Si el usuario root registra un trabajo cron, este trabajo se ejecutará con privilegios de root.

  • Si un usuario no root registra un trabajo cron, este trabajo se ejecutará con los privilegios del usuario antes mencionado; si el trabajo requiere privilegios de root, fallará porque lo inicia el usuario no root...

  • Es mejor llamar a comandos y secuencias de comandos usando rutas completas solo para asegurarse de que cron pueda encontrarlos y llamarlos correctamente; de ​​lo contrario, puede fallar sin comentarios útiles.

información relacionada