SFTP em um cron job

SFTP em um cron job

Emitir

  1. Quero automatizar o download de um arquivo via SFTP
  2. Eu configurei um servidor SFTP e um mecanismo de chaveamento
  3. Eu criei um script bash simples -script.sh
  4. Eu adicionei uma entrada no cron para o script

O roteiro,script.sh:

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

A execução manual do script funciona bem (o arquivo de texto é salvo no diretório inicial), mas adicionarscript.sh(com as devidas permissões) para crontabnão fazer nada.

A entrada do crontab:

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

Para autenticação eu costumava ssh-keygencriar um conjunto de chaves (privadas, públicas) e configurar a autenticação cruzada para o servidor SFTP.

Para automação de script, usei keychainautenticação sem senha.

Atualmente

Atualmente, tenho um script chamadoscript.shlocalizado no"do utilizador"diretório inicial ( /home/user/).

Quando executado rootmanualmente, o script obtém o arquivo do servidor SFTP e o coloca no formato /home/user/.

Ele não executa esta ação quando executado a partir de um crontrabalho. Em cron, o sftpcomando recebe um erro.

Ideias?

Trabalhando nisso

  1. Alterando aLARvariável ligada /etc/crontabnão resolveu o problema
  2. Indicando caminhos completos emscript.shnão resolveu o problema
  3. AfirmandoCAMINHOvariável emscript.shnão resolveu o problema
  4. Eu peguei o erro do sftpcomando - é255

executar o script manualmente ( ./script.sh) ainda funciona perfeitamente ...

Responder1

Um exemplo prático:

um script simples chamado hello.shque anexa a um arquivo de texto a palavra hello (usa caminhos completos para cada comando):

observação myuseré o nome do seu usuário

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

Torne o script executável usandochmod +x hello.sh

A entrada do crontab que é executada a cada minuto você pode alterá-la de acordo com suas necessidades:

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

Alguns detalhes:

  • Cada cron job é executado como o usuário que o registrou. Se o usuário root registrar um cron job, este trabalho será executado com privilégios de root.

  • Se um usuário não root registrar um cron job, este trabalho será executado com os privilégios do usuário mencionado acima; se o trabalho exigir privilégios de root, ele falhará porque foi iniciado pelo usuário não root...

  • É melhor chamar comandos e scripts usando caminhos completos apenas para ter certeza de que o cron pode encontrá-los e chamá-los corretamente, caso contrário, poderá falhar sem feedback útil.

informação relacionada