Tentando scp um arquivo em um script bash agendado pelo cron. Quando o cron dispara, o scp falha com uma mensagem de erro de permissão negada. Quando eu executo o script manualmente usando um comando como:
/etc/scripts> bash script3
o comando scp funciona muito bem.
De uma pergunta anterior sobre como solucionar problemas de cron em geral, aprendi que as variáveis de ambiente podem ser diferentes entre quando eu estou executando via linha de comando manualmente e quando o cron é executado. Então, seguindo uma das dicas de solução de problemas sugeridas, eu agendei o seguinte trabalho via cron:
lab-1:/etc/scripts# cat cronenvtest
OFILE=/tmp/crons.environment
(/usr/bin/whoami
/usr/bin/env ) > $OFILE 2>&1
A saída é assim:
lab-1:/var/www/# tail -f /tmp/crons.environment
HOME=/root
RC_SVCNAME=crond
LOGNAME=root
RC_SERVICE=/etc/init.d/crond
TERM=screen
SVCNAME=crond
PATH=/bin:/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
LANG=en.utf8
SHELL=/bin/sh
PWD=/root
Quando eu executo "env" na linha de comando, é assim:
lab-1:/tmp# env
SSH_CLIENT=10.1.1.1 57728 22
USER=root
MAIL=/var/mail/root
SHLVL=1
OLDPWD=/etc/scripts
HOME=/root
SSH_TTY=/dev/pts/4
PAGER=less
PS1=\h:\w\$
LOGNAME=root
TERM=screen
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
LANG=en.utf8
SSH_AUTH_SOCK=/tmp/ssh-eGvX0isT3V/agent.22951
SHELL=/bin/ash
PWD=/tmp
CHARSET=UTF-8
SSH_CONNECTION=10.1.1.1 57728 10.2.2.2 22
Aqui está a linha no script que tenta fazer o scp:
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null @$server:/tmp/"$server.db" "$dir/"
O que eu tentei até agora
Eu tentei mudar o comando scp para incluir o usuário root, assim:
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@$server:/tmp/$"server.db" "$dir/"
Tentou alterar o destino da variável $ dir para um caminho codificado como "/ tmp"
Tentou adicionar a seguinte linha ao script bash, logo antes do scp:
PWD=/etc/scripts
Até agora, nada disso funcionou. Alguma dica?
Tags ssh bash scp shell-script