SFTP em um cron job

0

Problema

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

O script, script.sh :

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

Executar o script manualmente funciona bem (o arquivo de texto é salvo no diretório inicial), mas a adição de script.sh (com as devidas permissões) a crontab não faz nada.

A entrada do crontab:

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

Para autenticação, usei ssh-keygen para criar um conjunto de chaves (privado, público) e configurar autenticação cruzada para o servidor SFTP.

Para a automação de scripts, usei keychain para autenticação sem senha.

Atualmente

Atualmente, tenho um script chamado script.sh localizado no diretório inicial "usuário" ( /home/user/ ).

Quando executado por root manualmente, o script obtém o arquivo do servidor SFTP e o coloca em /home/user/ .

Não executa esta ação quando executado a partir de um trabalho cron . Em cron , o comando sftp obtém um erro.

Idéias?

Trabalhando nisso

  1. A alteração da variável HOME em /etc/crontab não resolveu o problema
  2. A afirmação de caminhos completos em script.sh não resolveu o problema
  3. A indicação da variável PATH no script.sh não resolveu o problema
  4. Eu peguei o erro do comando sftp - é 255

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

    
por dsblind 04.06.2017 / 10:40

1 resposta

1

Um exemplo de trabalho:

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

note myuser é o nome do seu usuário

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

torne o script executável usando chmod +x hello.sh

A entrada crontab que é executada a cada minuto, você pode alterar isso de acordo com as suas necessidades:

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

Alguns detalhes:

  • Cada tarefa cron é executada como o usuário que a registrou. Se o usuário root registrar uma tarefa cron, essa tarefa será executada com privilégios de root.

  • Se um usuário não raiz registrar uma tarefa cron, essa tarefa será executada com os privilégios do usuário mencionado anteriormente; se a tarefa exigir privilégios de root, ela falhará porque é iniciada pelo usuário não raiz ...

  • Melhore os comandos de chamada e o script usando caminhos completos apenas para garantir que o cron possa localizá-los e chamá-los corretamente, caso contrário, ele poderá falhar sem feedback útil.

por Stef K 04.06.2017 / 11:25