Faço backups freqüentes em uma unidade local que desejo sincronizar diariamente com um servidor remoto.
O servidor de destino está configurado apenas para acesso à chave SSH (sem senha). Como minha chave SSH principal desse servidor é protegida por senha, criei uma segunda chave SSH (não protegida por senha) + usuário para usar em backups autônomos - dessa forma, não preciso estar presente para inserir minha senha quando o cron for executado .
Estou usando cron e rsync, e todos os comandos funcionam individualmente, mas falham quando combinados.
O máximo que eu tenho enquanto a solução de problemas está em execução
env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/"
que retorna o erro
Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.0]
Alguma dica sobre como solucionar isso ainda mais?
Aqui está o que eu tentei até agora e estou sem ideias:
- Cron está definitivamente rodando
ps aux | grep cron
Nada incomum em / var / log / syslog
Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)
SSH no Terminal para servidor remoto enquanto o usuário de backup trabalha
ssh backups-user@XX.XX.XX.XX
- A execução do comando no Terminal funciona perfeitamente
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
A especificação manual do caminho para a chave do usuário de backups não tem efeito
rsync -lrstRO --delete --exclude 'lost+found' -e 'ssh -i /home/tom/.ssh/backups-only' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Substituir o comando que não funciona por um comando de teste simples funciona
echo "Hello world" > ~/Desktop/test.txt
Gritar / xingar o computador não teve efeito (mas me fez sentir melhor temporariamente).
Editar 1:
Aqui está o meu arquivo crontab e o script que ele chama.
...
# m h dom mon dow command
MAILTO=""
* * * * * sh /home/tom/Documents/Scripts/offsite-backup
e
#!/bin/bash
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Edição 2:
Apenas para esclarecer, /var/log/auth.log
o servidor de destino contém a linha Sep 11 08:23:01 <hostname> CRON[24421]: pam_unix(cron:session): session closed for user root
Isso é confuso, porque não estou mais executando o cron a cada minuto localmente, mas uma nova entrada ainda aparece a cada minuto nos logs do servidor. Os arquivos Crontab para todos os usuários (incluindo root) no servidor estão vazios e não fazem nada.
Além disso, o usuário 'somente backups' foi criado apenas no servidor e com direitos limitados, com uma chave SSH dedicada copiada para minha máquina desktop. Estou assumindo que este é o caminho a seguir, porque tudo funciona ao executar os comandos manualmente.
O arquivo crontab postado acima é para mim, usuário 'tom' na minha máquina desktop. Minha intenção é chamar o script que deve efetuar login no servidor como usuário 'apenas backups'. Eu apenas tentei executar o script de backup (em vez do comando dentro dele) e ele se conectou e funcionou com sucesso. Eu o executei na minha área de trabalho como usuário 'tom', o mesmo usuário que criou o trabalho cron que não funcionará. Aqui está a saída do log do servidor correspondente a esse login bem-sucedido
Sep 11 08:35:31 <hostname> sshd[25071]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Sep 11 08:35:32 <hostname> sshd[25071]: Accepted publickey for backups-only from <desktop IP> port 54242 ssh2: RSA e2:e6:07:27:c1:continues...
Sep 11 08:35:32 <hostname> sshd[25071]: pam_unix(sshd:session): session opened for user backups-only by (uid=0)
Sep 11 08:35:32 <hostname> systemd-logind[638]: New session 12 of user backups-only.
Sep 11 08:36:00 <hostname> sshd[25133]: Received disconnect from <desktop IP>: 11: disconnected by user
Sep 11 08:36:00 <hostname> sshd[25071]: pam_unix(sshd:session): session closed for user backups-only
Sep 7 14:45:01 <hostname> CRON[18716]: pam_unix(cron:session): session closed for user root
Sep 7 16:06:02 <hostname> sshd[6747]...
. Você tem 100% de certeza de que esta linha de log é do servidor e que é a linha correta? O crontab que você postou é o crontab apenas de backups ? Além disso, tente adicionar o arquivo de identidade manualmente:rsync .... -e 'ssh -i /home/user/.ssh/identity' ...
auth.log
você postou em Edit 2 é para o cron sendo executado no servidor e não deve ter nada a ver com suas tentativas de login. Você pode tentar tail -f /var/log/auth.log
no servidor enquanto tenta executar o script através do cron? Além disso, não tenho certeza se isso funcionaria, mas você pode tentar seu primeiro env
comando rsync .... -e 'ssh -vvv -i /home/user/.ssh/identity ...
para ver se ele gera mais erros?