simples rsync no crontab sem senha

4

Eu gostaria de executar o seguinte: (Centos 5.4)

rsync -avz /source_folder 192.168.1.1:/destination_folder

agora eu estou rodando a partir do CLI, mas eventualmente eu gostaria de executá-lo a partir do crontab (usuário: root).

quando eu o executo, sempre me pede para digitar a senha do root. Eu quero pular a senha. Eu vi algumas das respostas sobre isso, mas ou não funciona ou eu não tenho certeza se entendi completamente como fazê-lo. alguém pode ajudar?

    
por edotan 03.04.2011 / 10:50

3 respostas

11

Como outros já disseram, você pode fazer isso com chaves ssh sem senha. Isso é inerentemente inseguro e você precisa executar etapas adicionais para adicionar alguma segurança ao processo. O que eu faço é restringir o uso da chave para um host e um comando . Eu escrevi isso em minhas anotações, acho que não perdi nenhuma saída.

A primeira coisa a fazer é gerar um par de chaves públicas que será usado apenas para esse processo de backup. Quando for solicitada uma frase secreta, basta pressionar enter duas vezes.

ssh-keygen -t rsa -b 2048 -C "For Backup use only"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/root/.ssh/id_rsa): /root/.ssh/backup.id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/backup.id_rsa.
Your public key has been saved in /root/.ssh/backup.id_rsa.pub.
The key fingerprint is:65:c0:cb:2b:9e:18:ff:b2:59:d4:b5:e8:ae:84:32:2b

Transfira a chave pública /root/.ssh/backup.id_rsa.pub para o host remoto e adicione-a ao arquivo /root/.ssh/authorized_keys .

No host remoto, restrinja o uso da chave pública adicionando from= e command= restrições. Edite o arquivo /root/.ssh/authorized_keys , localize a chave de backup e adicione o endereço / nome do host que executará a tarefa cron, bem como um comando a ser executado. Esse comando será executado quando algo fizer login com essa chave, por exemplo,

from="192.168.254.207",command="/root/checkrsync",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3N...

Você só pode usar essa chave em 192.168.254.207 e só pode executar o comando / root / checkrsync e outras funcionalidades foram removidas também.

Edite o arquivo / root / checkrsync como este

echo $SSH_ORIGINAL_COMMND >/tmp/rsync.cmd

salve e torne-o executável

chmod 700 /root/checkrsync

Alteraremos /root/checkrsync mais tarde, quando soubermos o que é $ SSH_ORIGINAL_COMMAND.

No host em que estaremos executando o cron job, execute o comando rsync de forma interativa

/usr/bin/rsync -avz -e "/usr/bin/ssh -i /root/.ssh/backup.id_rsa" /source_folder [email protected]:/destination_folder

Não se preocupe com mensagens de erro que queremos apenas gerar o arquivo /tmp/rsync.cmd no host remoto

No host remoto, faça uma anotação exata do conteúdo do arquivo /tmp/rsync.cmd (será algo como rsync --server -vlogDtprze.iLs . /destination_folder ).

Na edição do host remoto /root/checkrsync e altere para

if [[ "$SSH_ORIGINAL_COMMAND" == "rsync --server -vlogDtprze.iLs . /destination_folder" ]]
then
     $SSH_ORIGINAL_COMMAND
fi

onde o lado direito da instrução if é o que estava em /tmp/rsync.cmd.

Teste a configuração. No host em que estaremos executando o cron job, execute o comando rsync de forma interativa novamente

/usr/bin/rsync -avz -e "/usr/bin/ssh -i /root/.ssh/backup.id_rsa" /source_folder [email protected]:/destination_folder 

Agora ele deve ser executado corretamente se for instalado no seu crontab.

crontab -e 

* 1 * * *  /usr/bin/rsync -avz -e "/usr/bin/ssh -i /root/.ssh/backup.id_rsa" /source_folder [email protected]:/destination_folder
    
por 05.04.2011 / 14:10
4

Você precisa configurar a autenticação de chave ssh sem senha.

Tenha em mente as preocupações de segurança ao configurar isso. Recomendo usar uma lista de acesso ao host para restringir o IP de origem usando a chave.

    
por 03.04.2011 / 10:59
2

Verifique o seguinte link para configurar as chaves SSH. As chaves SSh ajudarão você a configurar a senha menos o login ssh.

link

Configurando o CRON:

  1. Fazer login como root
  2. Abra um terminal e digite crontab -e , depois digite

    1 * * * * rsync -avz / source_folder 192.168.1.1:/destination_folder

Nota

Isso será executado a cada hora.

    
por 03.04.2011 / 11:03

Tags