É possível especificar uma porta ssh diferente ao usar o rsync?


366

Eu tenho tentado o seguinte comando:

rsync -rvz --progress --remove-sent-files ./dir user@host:2222/path

O SSH está sendo executado na porta 2222, mas o rsync ainda tenta usar a porta 22 e depois reclama de não encontrar o caminho, porque é claro que ele não existe.

Gostaria de saber se é possível rsync para um host remoto em uma porta ssh não padrão.

Respostas:


136

Outra opção, no host do qual você executa o rsync, defina a porta no arquivo de configuração ssh, ou seja:

cat ~/.ssh/config
Host host
    Port 2222

Então o rsync over ssh conversará com a porta 2222:

rsync -rvz --progress --remove-sent-files ./dir user@host:/path

21
Embora essa não seja a resposta mais óbvia, ainda é uma resposta muito boa. Vale a pena usar a configuração SSH para qualquer host ao qual você se conecte mais de uma ou duas vezes, pois você economizará muito tempo para pensar e digitar.
John Hunt

5
De fato, embora seja justo, a desvantagem é que fica invisível, ou seja, depois de um tempo podemos esquecer que ele está no arquivo de configuração ssh e não entender como ele funciona, ou um de seus colegas pode copiar / colar o comando e não entender por que não funciona na conta deles. Ainda assim, pessoalmente, prefiro não precisar digitar o número da porta o tempo todo.
João Costa

11
Isto é horrível. é completamente incompatível com o NAT da porta. a menos que você queira ter vários nomes de DNS para o mesmo endereço IP, que é um problema de manutenção
meffect

11
@melfect Você está brincando? Eu não chamaria isso de horrível tanto quanto eu diria que é a melhor coisa de todos os tempos para alguém que precisa rsyncde um porto estranho muitas vezes, mas cada vez é espalhado apenas o suficiente para esquecer a sintaxe.
Freedom_Ben

11
Embora isso facilite sua conexão, também facilita para hackers, e seu auth.log será novamente inundado com tentativas automatizadas. Então isso meio que anula o ponto de mudar de porta.
forthrin 17/09/18

625

Sua linha de comando deve ficar assim:

rsync -rvz -e 'ssh -p 2222' --progress ./dir user@host:/path

isso funciona bem - eu uso o tempo todo sem precisar de novas regras de firewall - observe que o próprio comando SSH está entre aspas.


8
Eu me pergunto por que é assim - é uma necessidade tão óbvia, ainda bastante oculta, pois isso está efetivamente criando um alias para o binário ssh. (Ele funcionou perfeitamente, embora)
jsbueno

11
Funciona com símbolo de dois pontosuser@host:/path
DmitrySandalov

23
a parte fundamental do comando é -e 'ssh -p 2222' para que você pode usar isso com diferentes parâmetros rsync
Evan Donovan

2
Note que se você precisa de especificação uma chave ssh você pode fazer isso como -e 'ssh -i mykey -p 2222'
dranxo

9
por que - remover arquivos enviados? Se é perigoso para os dados de origem, melhor mencionou ...
Tiw

14

quando você precisar enviar arquivos por uma porta SSH específica:

rsync -azP -e "ssh -p PORT_NUMBER" source destination

exemplo

rsync -azP -e "ssh -p 2121" /path/to/files/source user@remoteip:/path/to/files/destination

3
e o que exatamente isso adiciona à resposta existente?
Chris Maes

veja o formato ee o exemplo. Eu simplifiquei as coisas aqui.
Techie

4
OK você removeu duas opções opcionais, mas em essência a sua resposta é exatamente o mesmo que o aceita ...
Chris Maes

2
É mais simplificado e formatado. Mais fácil de entender para novos alunos. A propósito, obrigado por votar sem motivo
Techie


2

Um pouco offtopic, mas pode ajudar alguém. Se você precisar passar a senha e a porta, sugiro usar o sshpasspacote. O comando da linha de comando ficaria assim: sshpass -p "password" rsync -avzh -e 'ssh -p PORT312' root@192.xx.xxx.xxx:/dir_on_host/


Isso não funciona porque o teclado interativo interfere no fluxo de dados, corrompendo o protocolo.
Evi1M4chine

2

Encontrei esta solução no site de Mike Hike Hostetler que funcionou perfeitamente para mim.

# rsync -avz -e "ssh -p $portNumber" user@remoteip:/path/to/files/ /local/path/

3
e o que exatamente isso adiciona à resposta existente?
Chris Maes

Bom funciona perfeitamente. Obrigado :)
Sammu Sundar

2

A sintaxe correta é dizer ao Rsync para usar um comando SSH personalizado (adicionando -p 2222), que cria um túnel seguro para o lado remoto usando SSH e, em seguida, se conecta via host local: 873

rsync -rvz --progress --remove-enviou-files -e "ssh -p 2222" ./dir usuário @ host / caminho

O Rsync é executado como um daemon na porta TCP 873, que não é segura.

De Rsync man:

Push: rsync [OPTION ...] SRC ... [USER @] HOST: DEST

O que leva as pessoas a tentar isso:

rsync -rvz --progress --remove-enviou-files ./dir usuário @ host: 2222 / path

No entanto, isso está instruindo-o a conectar-se ao daemon Rsync na porta 2222, que não está lá.


outras respostas não mencionou porta 873
kevinf

a questão era como fazê-lo funcionar como ssh na porta 2222; se o rsync exige ou não, é uma história diferente.
Dan Steingart

@DanSteingart Atualizei a resposta, isso ajuda mais agora?
Kevinf 24/04/19

-3

Não consegui que o rsync se conectasse via ssh em uma porta diferente, mas consegui redirecionar a conexão ssh para o computador que desejava via iptables. Esta não é a solução que eu estava procurando, mas resolveu o meu problema.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.