Emitir
- Quero automatizar o download de um arquivo via SFTP
- Eu configurei um servidor SFTP e um mecanismo de chaveamento
- Eu criei um script bash simples -script.sh
- 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 crontab
não fazer nada.
A entrada do crontab:
* * * * * /home/user/script.sh
Para autenticação eu costumava ssh-keygen
criar um conjunto de chaves (privadas, públicas) e configurar a autenticação cruzada para o servidor SFTP.
Para automação de script, usei keychain
autenticação sem senha.
Atualmente
Atualmente, tenho um script chamadoscript.shlocalizado no"do utilizador"diretório inicial ( /home/user/
).
Quando executado root
manualmente, 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 cron
trabalho. Em cron
, o sftp
comando recebe um erro.
Ideias?
Trabalhando nisso
- Alterando aLARvariável ligada
/etc/crontab
não resolveu o problema - Indicando caminhos completos emscript.shnão resolveu o problema
- AfirmandoCAMINHOvariável emscript.shnão resolveu o problema
- Eu peguei o erro do
sftp
comando - é255
executar o script manualmente ( ./script.sh
) ainda funciona perfeitamente ...
Responder1
Um exemplo prático:
um script simples chamado hello.sh
que 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.