É 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.

Ketema
fonte

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
João Costa
fonte
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.

klapa
fonte
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
Techie
fonte
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' [email protected]:/dir_on_host/

Tomas
fonte
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/
Rusty1
fonte
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á.

kevinf
fonte
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.

Ketema
fonte