Como posso rsync sem solicitar senha, sem usar autenticação de chave pública?

34

Eu preciso executar rsync , sem que isso me avise por senha.

Eu vi em rsync manpage que não permite especificar a senha como argumento de linha de comando.
Mas notei que permite especificar a senha através da variável RSYNC_PASSWORD .

Então, tentei exportar a variável, mas rsync continua me pedindo senha.

export RSYNC_PASSWORD="abcdef"
rsync [email protected]:/abc /def

O que estou fazendo de errado?

Por favor, considere:

Em outras palavras, eu preciso ter a abordagem RSYNC_PASSWORD funcionando! : -)

    
por Dor 29.01.2014 / 19:55

4 respostas

13

Esta variável de ambiente de senha aparece apenas para ser usada ao usar o protocolo rsync:

rsync rsync://[email protected]:/abc /def

Para que isso funcione, você precisa executar o rsync como um daemon também ( --daemon option), o que geralmente é feito usando inetd.conf .

Ao usar este protocolo, abc deve corresponder a um destino definido em /etc/rsyncd.conf . O nome do usuário deve estar presente em uma linha auth users para esse destino, e um arquivo de senha deve ser especificado com a opção secrets file .

Este é o arquivo de segredos que contém mapeamentos entre nomes de usuário e senhas no seguinte formato:

username:password

E é essa senha que você pode especificar usando a variável de ambiente RSYNC_PASSWORD.

    
por 29.01.2014 / 20:43
45

Se o daemon rsync não estiver sendo executado na máquina de destino e você não se importar em expor senhas para todos na máquina local ( Por que alguém não deveria usar senhas na linha de comando? ), você pode usar sshpass :

 sshpass -p "password" rsync [email protected]:/abc /def

Observe o espaço no início do comando, no bash shell isso impedirá que o comando (e a senha) sejam armazenados no histórico. Eu não recomendo usar a variável RSYNC_PASSWORD a menos que seja absolutamente necessário (de acordo com uma edição anterior a esta resposta), eu recomendo suprimir o armazenamento do histórico ou pelo menos limpar o histórico depois. Além disso, você pode usar tput reset para limpar seu histórico de terminal.

    
por 29.01.2014 / 21:23
14

Você pode usar identidades ssh padrão para fazer login sem senha. Isso é feito por padrão se você tiver um ~ / .ssh / id_rsa ou algo parecido, mas também pode codificar seu próprio caminho para a chave privada de um par de chaves autenticado.

Isso permite lotes / scripts sem expor senhas, e a chave pública pode ser removida do servidor de destino se a chave privada estiver comprometida.

rsync -e"ssh -i /path/to/privateKey" -avR $sourcedir ${ruser}@${rhost}:~/${rdir}/

Você também pode adicionar arugments como -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null para não forçar a verificação da chave do host remoto. ! Cuidado - que abre o homem nos ataques do meio e é uma prática ruim em geral!

    
por 23.12.2014 / 21:04
11

Muito útil para scripts é usar a opção de linha de comando --password-file .

  • Crie um arquivo vazio chamado rsync_pass
  • escreva a senha para este arquivo (nada mais)
  • chmod 600 rsync_pass
  • rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory

Isso pode ser usado para criação de scripts e permite ser mais seguro do que apenas exportar senha para a variável do sistema.

    
por 22.02.2015 / 14:22