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/
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?
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/
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.