Forçando o rsync para o modo não interativo

7

Eu gostaria de usar o rsync dentro de um script python. Estou chamando-o usando o módulo subprocess e autenticando usando chaves públicas armazenadas no arquivo authorized_key na máquina remota.

O único problema é que quando uso o rsync usando um nome de usuário remoto errado, sou solicitado a fornecer uma senha, que obviamente para sempre o script de backup.

Posso forçar o rsync a sair com erro se não puder autenticar, em vez de solicitar senha?

Udi

    
por Adam Matan 12.07.2009 / 16:21

5 respostas

9

Supondo que você use rsync com um shell SSH remoto (e não - por exemplo - com um servidor rsync), então você pode fazer com que o rsync execute o SSH de uma maneira que nunca pedirá uma senha. Por exemplo, uma vez pode usar esta chamada:

rsync -e 'ssh -o "NumberOfPasswordPrompts 0"' source user@target:/path

Isso forçará o rsync a usar o SSH com 0 possíveis tentativas de senha - se não conseguir acessar usando algum outro método de autenticação (como chave pública ou GSSAPI), ele falhará com um erro. Note que o rsync não vai gostar de você quando isso acontecer e vai reclamar alto para STDERR e quebrar com o código de saída 255.

    
por 12.07.2009 / 22:11
5

Aqui estão as opções de linha de comando para o ssh que eu uso para mantê-lo quieto.

ssh -o stricthostkeychecking=no -o userknownhostsfile=/dev/null -o batchmode=yes -o passwordauthentication=no

Você só precisa do material do hostkey se não mantiver seu arquivo known_hosts e estiver preocupado em receber avisos do MitM. Em vez de especificar os tipos de autenticação, como sugerido por James F, tive que restringir explicitamente a autenticação por senha. Eu uso isso para acertar centenas de hosts com algumas versões diferentes do sistema operacional, por isso pode ser apenas uma incompatibilidade.

    
por 13.07.2009 / 19:31
1

re: A sugestão de James (não dando tty), para o subprocesso, tente colocar stdin = None como um parâmetro para Popen.

    
por 12.07.2009 / 18:33
0

Primeiro, o rsync funcionará a partir do shell, o comando deve se parecer.

Se isso falhar, depure o comando ssh sozinho. Quando tudo isso funciona, então veja o que acontece com o script python

Este não é um tutorial ruim

    
por 12.07.2009 / 18:29
0

Dependendo de como você está lançando o rsync, não dar um TTY ou PTY pode ajudar.

Muitos programas verificam se eles têm um TTY de controle antes de decidir solicitar a entrada do usuário. O comportamento padrão de system () e chamadas semelhantes é fornecer um tty para subprogramas, mas você pode desabilitar isso.

Também pode ser possível desabilitar a autenticação de senha totalmente no lado remoto se você estiver no controle de ambos os sistemas e quiser se afastar da autenticação de senha para os benefícios de segurança enquanto resolve esse problema.

Se você está fazendo rsync por SSH, você pode adicionar o seguinte ao seu arquivo ssh_config para o host em questão, ou por meio da opção de linha de comando -o:

PreferredAuthentications publickey

Em um teste rápido (apenas de ssh, não rsync) que fez com que o SSH saísse imediatamente quando minha chave pública não foi aceita sem solicitar uma senha.

    
por 12.07.2009 / 18:28

Tags