Por que este trabalho rsync + ssh cron está me dando erros 'Permission denied (publickey)'?

16

Faço backups frequentes em uma unidade local que desejo sincronizar diariamente para um servidor remoto.

O servidor de destino está configurado apenas para acesso à chave SSH (sem senha). Como a minha chave SSH primária para esse servidor é protegida por frase-senha, tenho criou uma segunda chave SSH (não protegida por senha) + usuário para usar backups autônomos - dessa forma eu não preciso estar presente para inserir minha senha quando o cron é executado.

Estou usando o cron e o rsync, e todos os comandos funcionam individualmente, mas falham quando combinados.

O mais longe que tenho enquanto a solução de problemas está em andamento

env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ [email protected]:/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?

Veja o que tentei até agora e fiquei sem ideias:

  1. Cron definitivamente está rodando ps aux | grep cron
  2. Nada incomum em / var / log / syslog Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)

  3. SSH no Terminal para o servidor remoto, pois o usuário de backup trabalha em ssh [email protected]

  4. A execução do comando no Terminal funciona perfeitamente rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ [email protected]:/backups/desktop/
  5. Especificar manualmente o caminho para a chave backups-user não tem efeito rsync -lrstRO --delete --exclude 'lost+found' -e 'ssh -i /home/tom/.ssh/backups-only' /Backups/auto-daily-backups/./ [email protected]:/backups/desktop/

  6. Substituir o comando que não funciona por um comando de teste simples funciona echo "Hello world" > ~/Desktop/test.txt

  7. Gritar / xingar no 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/./ [email protected]:/backups/desktop/

Editar 2:

Só para esclarecer, /var/log/auth.log no 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 & amp; não faça 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 a minha máquina desktop. Estou assumindo que este é o caminho a percorrer, 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 é que ele chame o script que deve fazer login no servidor como usuário 'somente backups'. Acabei de tentar executar o script de backup (em vez do comando dentro dele) e ele conectou & amp; trabalhado. Eu corri na minha área de trabalho como usuário 'tom', mesmo usuário que criou o cron job que não funciona. Aqui está a saída do log do servidor correspondente com o 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
    
por Tom Brossman 07.09.2014 / 15:05

5 respostas

13

Como tudo está funcionando bem na linha de comando, o erro Permission denied (publickey) significa que a parte SSH do rsync está usando um arquivo de identidade diferente do nome de usuário especificado.

De Comentário de Jan sobre a questão original, podemos especificar o arquivo de identidade no comando rsync usando -e 'ssh -i /path/to/identity.file' ... .

Usar o comando abaixo para começar com um novo ambiente no cron e especificar o caminho completo para o arquivo aparentemente resolve o problema:

env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' -e 'ssh -i /home/tom/.ssh/backups-only' /Backups/auto-daily-backups/./ [email protected]:/backups/desktop/"

Eu ainda estou realmente interessado nessa descoberta. Provavelmente tem a ver com o cron, o fato de que ele começa com variáveis de ambiente mínimas e o ssh-agent. Vou configurar o mesmo cenário em alguns dias para testá-lo e informar.

    
por Alaa Ali 15.09.2014 / 21:48
0

Você já tentou o velho truque de limpar os arquivos hosts? Quero dizer:

rm ~/.ssh/known_hosts

Vale a pena tentar, já que o ssh irá reconstruí-lo e você se livrará de coisas obsoletas. Você também pode remover as partes que pertencem a um determinado IP / host.

Mais perguntas: Sua tarefa do cron está sendo executada sob seu UID ou está sendo executada como usuário cron ou root?

    
por runlevel0 14.09.2014 / 11:56
0

Use o script rrsync juntamente com uma chave ssh dedicada da seguinte forma:

Servidor REMOTO

mkdir ~/bin
gunzip /usr/share/doc/rsync/scripts/rrsync.gz -c > ~/bin/rrsync
chmod +x ~/bin/rrsync

Computador LOCAL

ssh-keygen -f ~/.ssh/id_remote_backup -C "Automated remote backup"      #NO passphrase
scp ~/.ssh/id_remote_backup.pub [email protected]:/home/devel/.ssh

Computador REMOTO

cat id_remote_backup.pub >> authorized_keys

Prefira à linha recém-adicionada o seguinte

command="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding

Para que o resultado pareça

command="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAA...vp Automated remote backup

LOCAL

Coloque em seu crontab o seguinte script com x permission:

#!/bin/sh
echo ""
echo ""
echo "CRON:" 'date'
set -xv
rsync -e "ssh -i $HOME/.ssh/id_remote_backup" -avzP [email protected]:/ /home/user/servidor 

Fonte: link

    
por Alessandro Cuttin 12.12.2016 / 16:56
0

Para tentar depurar adicione à parte ssh "ssh -v" desta forma você pode obter o modo detalhado com algumas informações úteis.

Editar: da página de manual:

-v      Verbose mode.  Causes ssh to print debugging messages about its progress.  This is helpful in debugging connection,
             authentication, and configuration problems.  Multiple -v options increase the verbosity.  The maximum is 3.
    
por Pedro Luz 13.09.2017 / 10:36
-1

Acho que você não configurou o arquivo sshd_config corretamente. Verifique se PermitRootLogin yes e PubkeyAuthentication yes para manutenção remota.

    
por Anandu M Das 15.09.2014 / 12:26