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 root@1.2.3.4:/abc /def

O que estou fazendo errado?

Por favor considere:

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


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://username@1.2.3.4:/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.


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 root@1.2.3.4:/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.


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!


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.