Eu preciso executar rsync
, sem que ele me solicite a senha.
Eu vi na página de rsync
manual 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 rsync
continua me pedindo senha.
export RSYNC_PASSWORD="abcdef"
rsync [email protected]:/abc /def
O que estou fazendo errado?
Por favor considere:
- Entendo que essa é uma má ideia do aspecto de segurança
- Devo usar apenas
rsync
, não consigo usar outro software - Não consigo usar autenticação baseada em chave
- Eu já li muitas perguntas do SE, por exemplo:
como passar senha para rsync-ssh-command @ stackoverflow.com
rsync-cron-trabalho-com-senha @ superuser.com
como configurar -rsync-sem-senha-com-ssh-no-unix-linux @ superuser.com
Em outras palavras, eu preciso ter a RSYNC_PASSWORD
abordagem funcionando! :-)
Respostas:
Essa variável de ambiente de senha parece ser usada apenas ao usar o protocolo rsync:
Para que isso funcione, você também precisa executar o rsync como um daemon (
--daemon
opção), o que geralmente é feito usandoinetd.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 umaauth users
linha para esse destino e um arquivo de senha deve ser especificado com asecrets file
opçãoÉ esse arquivo de segredos que contém mapeamentos entre nomes de usuário e senhas no seguinte formato:
E é essa senha que você pode especificar usando a variável de ambiente RSYNC_PASSWORD.
fonte
Se o
rsync
daemon 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á usarsshpass
: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. Não recomendo usar aRSYNC_PASSWORD
variá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 usartput reset
para limpar o histórico do terminal.fonte
sshpass -p $(cat passFile) ..
para esconder passagem clara na história do bash ,, e chmod 400 em PASSFILE para prendê-lo-p "$RSYNC_PASSWORD"
Você pode usar identidades ssh padrão para fazer login sem senha. Isso é tratado 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 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.
Você também pode adicionar argumentos
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
para 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!fonte
~/.ssh
pasta 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)Muito útil para scripts é usar a
--password-file
opção de linha de comando.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.
fonte