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

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

Eu gostaria de usar o rsync em um script python. Estou chamando-o usando o subprocessmódulo e autenticando usando chaves públicas armazenadas no authorized_keyarquivo da máquina remota.

O único problema é que quando uso o rsync com um nome de usuário remoto incorreto, sou solicitada uma senha, o que obviamente interrompe o script de backup para sempre.

Posso forçar rsynca saída com erro se não for possível autenticar, em vez de solicitar a senha?

Udi

Responder1

Supondo que você use o rsync com um shell remoto SSH (e não - por exemplo - com um servidor rsync), você poderá fazer com que o rsync execute o SSH de uma maneira que nunca solicitará 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 SSH com 0 possíveis tentativas de senha - se não conseguir obter acesso usando algum outro método de autenticação (como chave pública ou GSSAPI), ele falhará com um erro. Observe que o rsync não gostará de você quando isso acontecer e reclamará em voz alta com o STDERR e interromperá o código de saída 255.

Responder2

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

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

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

Responder3

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

Responder4

Dependendo de como você está iniciando o rsync, não fornecer um TTY ou PTY pode ajudar.

Muitos programas verificam se possuem 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 totalmente a autenticação por senha no lado remoto se você estiver no controle de ambos os sistemas e quiser evitar a autenticação por senha para obter benefícios de segurança ao resolver esse problema.

Se estiver 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 ssh, não rsync) que fez com que o SSH fosse encerrado imediatamente quando minha chave pública não foi aceita sem solicitar uma senha.

informação relacionada