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

44

Eu preciso executar rsync, sem que ele me solicite a senha.

Eu vi na página de rsyncmanual que ele não permite especificar a senha como argumento da linha de comando.
Mas notei que ele permite especificar a senha via variável RSYNC_PASSWORD.

Então, eu tentei exportar a variável, mas rsynccontinua me pedindo senha.

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

O que estou fazendo errado?

Por favor considere:

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

Dor
fonte
você ativou o daemon rsync no servidor remoto?
Rahul Patil

Respostas:

13

Essa variável de ambiente de senha parece ser usada apenas ao usar o protocolo rsync:

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

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

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

É esse 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.

brm
fonte
uma forma quicky para executar um servidor rsync é com https://s3.amazonaws.com/skaperen/rsend
Skaperen
65

Se o rsyncdaemon 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 deve usar senhas na linha de comando? ), Você poderá usar sshpass:

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

Observe o espaço no início do comando; no bashshell, isso impedirá que o comando (e a senha) sejam armazenados no histórico. Não recomendo usar a RSYNC_PASSWORDvariável, a menos que seja absolutamente necessário (conforme uma edição anterior desta resposta), recomendo suprimir o armazenamento do histórico ou, pelo menos, limpar o histórico depois. Além disso, você pode usar tput resetpara limpar o histórico do terminal.

Graeme
fonte
2
Por que você sugerem a adição de texto claro senha em um comando, isso é ruim linux administrador 101.
Eddie
Super útil .. procurou uma abordagem para isso por um tempo. Obrigado.
Isaac Gregson
6
Embora seja ruim adicionar a senha como texto não criptografado, atualmente é a única maneira razoavelmente simples de fazer isso.
Weston Ganger
15
você sempre pode fazer algo como isto: sshpass -p $(cat passFile) ..para esconder passagem clara na história do bash ,, e chmod 400 em PASSFILE para prendê-lo
Kresimir Pendic
3
Eu sei que este é antiga, mas por uma questão de leitores mais recentes, por favor citar a senha - senhas podem conter caracteres especiais e espaços. -p "$RSYNC_PASSWORD"
Paddy Landau
16

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

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

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

Você também pode adicionar argumentos -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nullpara não forçar a verificação de chave do host remoto. Cuidado - isso abre o homem nos ataques intermediários e é uma prática geral ruim!

Eddie
fonte
1
Isso é especialmente útil se você estiver usando o novo shell Bash para Windows 10. Eu queria saber por que o rsync não estava funcionando sem senha. Percebi que estava usando a ~/.sshpasta dentro do shell (onde o rsync mora). Depois que eu usei -e para apontar para a chave /mnt/c/Users/MyUsername/.ssh, ela funcionou como esperado. (Obrigado.: D)
Toby Deshane
12

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

  • 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 scripts e permite ser mais seguro do que apenas exportar a senha para a variável do sistema.

Arunas Bartisius
fonte
4
Nota para o leitor: isso também requer um daemon rsync em execução no servidor. Eu realmente esperava que as chaves ssh fossem suficientes para o rsync sem senha.
Sridhar Sarnobat 2/11
IMHO, esta é a única maneira correta de fazer isso, se alguém não quiser usar o ssh.
Maxf130 8/16
Esta resposta faz mais sentido
AJ Meyghani