Eu tenho um cronjob:
0 9 * * * rsync -a mydir remote_machine:
Eu instalei isso com 'crontab -e'. Eu tenho um agente ssh em execução e, quando executo o próprio comando rsync, ele funciona sem qualquer interação do usuário ou entrada de senha, mas o cronjob falha com a seguinte mensagem:
Date: Wed, 9 Dec 2009 11:11:00 -0600 (CST)
From: Cron Daemon <me@my_machine.my_domain>
To: me@my_machine.my_domain
Subject: Cron <me@my_machine> rsync -a /home/me/mydir remote_machine:
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-35.2/rsync/io.c(452)
[sender=2.6.9]
por que isso não funciona? Eu sei que os cronjobs executam w / me como usuário (se eu executar '* * * * * touch / tmp / a' eu possuo o arquivo), por isso presumo que o rsync esteja efetuando login como eu usando minha chave privada ...
chaveiro é o que você precisa! Basta instalá-lo e adicionar o código a seguir no seu
.bash_profile
(ou equivalente):Para config.fish ( 2 ):
Em seguida, use o código abaixo no seu script para carregar as variáveis de ambiente do ssh-agent:
Para peixes:
Se sua chave tiver uma frase secreta, a chave solicitará uma vez (válida até você reiniciar a máquina ou matar o ssh-agent).
Nota: o chaveiro também gera código para
csh
efish
conchas, portanto, substitua o sufixo "-sh" por "-csh" ou "-fish".fonte
Não tenho representante suficiente para votar na primeira resposta, mas resolveu o problema que estava tendo. Em termos de ssh-agent, você já pode ter um em execução. Aqui está um script para extrair o SSH_AGENT_PID & SSH_AUTH_SOCK do ambiente sem nenhum material adicional a ser salvo na inicialização do ssh-agent. (Supõe que você tenha perl)
Coloque o seguinte em um script. (por exemplo, findagent.pl)
e dentro do seu script cron, adicione a linha:
eval `{caminho para o script} / findagent.pl`
fonte
Suponho que você esteja usando autenticação baseada em chave para se autenticar na máquina remota. Experimente a linha abaixo:
Onde .ssh / id_rsa é o caminho para sua chave privada. Esta é a linha exata que estou usando para fazer meus backups e sempre funciona bem para mim.
Muitas felicidades,
Fabian
fonte
Como alternativa, em vez de usar o agente ssh, fiz o meu script exportar RSYNC_RSH = "ssh -i /home/user/.ssh/id_rsa" unset SSH_AGENT_PID não SSH_AUTH_SOCK antes de chamar o rsync. Ao colocá-lo em RSYNC_RSH, em vez de usar '-e ...', foi fácil ajustar o arquivo de identificação usado com base no host.
Espero que isso ajude, B
fonte