rsync acha que o host de origem é um comando

1

Então, eu estava tentando baixar um arquivo de um host remoto conectado com SSH para uma pasta local no meu Mac usando rsync . O comando que eu usei é:

$ rsync --progress -avz -e "ssh [email protected] -i ~/.ssh/keyFile" [email protected]:/path/to/files/ ~/Downloads/

E aqui está o que é solicitado:

[email protected]'s password: [I typed the password here]
bash: 1.2.3.4: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.3]

Parece estranho que o endereço do host remoto 1.2.3.4 seja interpretado como um comando ?! Não sei como e por que isso acontece. Como eu poderia atualizar o comando para alcançar o resultado esperado e começar a copiar o arquivo?

    
por jackxujh 28.09.2018 / 17:41

2 respostas

3

Tenho certeza de que você não deseja incluir a parte user @ host do comando ssh dentro do sinalizador -e. Experimente

rsync --progress -avz -e "ssh -i ~/.ssh/keyFile" [email protected]:/path/to/files/ ~/Downloads/
    
por 28.09.2018 / 18:02
1

O comando ssh , quando usado com a opção -e (ou --rsh ) em rsync , não precisa mencionar o host remoto pelo nome, pois isso faz parte da especificação de origem (no seu comando ).

No seu caso, seria suficiente usar

rsync --progress -avz -e "ssh -i ~/.ssh/keyFile" [email protected]:/path/to/files/ ~/Downloads/

rsync executará o comando fornecido em -e junto com o caminho de origem. Você pode ver o comando exato sendo executado se você usar outro -v . Muito provavelmente será parecido com

opening connection using: ssh -i "~/.ssh/keyFile" [email protected] -l root 1.2.3.4 rsync --server --sender -vvlogDtpre.iLfxC . /path/to/files/

Aqui, você pode ver que 1.2.3.4 seria interpretado como um comando a ser executado no host remoto como usuário root (recebendo o comando real que deve ser executado como linha de comando argumentos).

rsync inicia um "remetente" no lado da origem da cópia do arquivo e um "receptor" no lado do destino. Esses dois processos estão comunicando os dados e somas de verificação reais entre si para executar a cópia do arquivo. O comando ssh que você vê acima é o comando que rsync usa para (tentar) iniciar o remetente no host remoto. Os --server --sender etc. são sinalizadores de linha de comando internos que rsync usa para essa finalidade. O manual rsync basicamente diz "não use essas opções você mesmo".

No seu caso, você pode ver na mensagem de erro que o receptor ( rsync em execução localmente) está tendo problemas para se comunicar com o remetente no host remoto. Isso ocorre porque o remetente não foi iniciado corretamente e isso, por sua vez, ocorreu devido ao comando ssh incorreto.

    
por 28.09.2018 / 18:04