È possibile specificare una porta ssh diversa quando si utilizza rsync?


366

Ho provato il seguente comando:

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

SSH è in esecuzione sulla porta 2222, ma rsync tenta ancora di utilizzare la porta 22 e quindi si lamenta di non trovare il percorso, perché ovviamente non esiste.

Vorrei sapere se è possibile eseguire la risincronizzazione con un host remoto su una porta ssh non standard.

Risposte:


136

Un'altra opzione, nell'host da cui si esegue rsync, imposta la porta nel file di configurazione ssh, ovvero:

cat ~/.ssh/config
Host host
    Port 2222

Quindi rsync su ssh parlerà con la porta 2222:

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

21
Sebbene questa non sia la risposta più ovvia, è comunque un'ottima risposta. Vale la pena usare la configurazione SSH per qualsiasi host a cui ti connetti più di una volta o due, poiché ti farà risparmiare molto pensiero e digitazione.
John Hunt,

5
In effetti, anche se per essere onesti, il rovescio della medaglia è che diventa invisibile, vale a dire, dopo un po 'si potrebbe dimenticare che è nel file di configurazione ssh e non capire come funziona, o uno dei tuoi colleghi potrebbe copiare / incollare il comando e non capire perché non funziona nel loro account. Tuttavia, personalmente preferisco non dover digitare sempre il numero di porta.
Joao Costa,

1
Questo è orribile. è completamente incompatibile con il porting NATing. a meno che tu non voglia avere più nomi DNS per lo stesso indirizzo IP, il che è un problema di manutenzione
meffect

1
@melfect Stai scherzando? Non lo definirei orribile quanto lo definirei la cosa più grande di sempre per qualcuno che ha bisogno rsyncdi una strana porta molte volte, ma ogni volta è distribuito quanto basta per dimenticare la sintassi.
Freedom_Ben,

1
Mentre questo ti rende più facile connetterti, lo rende anche più facile per gli hacker e il tuo auth.log sarà nuovamente invaso da tentativi automatici. Quindi annulla il punto di cambiare le porte.
Outrin,

625

La tua riga di comando dovrebbe apparire così:

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

funziona benissimo - lo uso sempre senza bisogno di nuove regole firewall - basta notare che il comando SSH stesso è racchiuso tra virgolette.


8
Mi chiedo perché sia ​​così - è un'esigenza così ovvia, ancora abbastanza nascosta, poiché questo sta effettivamente creando un alias per il binario ssh. (Ha funzionato perfettamente, però)
jsbueno

1
Funziona con il simbolo dei due puntiuser@host:/path
DmitrySandalov,

23
la parte chiave del comando è -e 'ssh -p 2222' quindi puoi usarlo con diversi parametri rsync
Evan Donovan

2
Nota che se hai bisogno di specificare una chiave ssh puoi farlo come -e 'ssh -i mykey -p 2222'
dranxo

9
perché --remove-sent-files? Se è pericoloso per i dati di origine, meglio menzionarlo ...
Tiw

14

quando è necessario inviare file tramite una porta SSH specifica:

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

esempio

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

3
e cosa si aggiunge esattamente alla risposta esistente?
Chris Maes,

guarda il formato e l'esempio. Ho semplificato le cose qui.
Techie,

4
OK hai rimosso due opzioni opzionali, ma in sostanza la tua risposta è esattamente la stessa di quella accettata ...
Chris Maes,

2
È più semplificato e formattato. Più facile da capire per i nuovi studenti. A proposito, grazie per aver votato verso il basso senza motivo
Techie,


2

Un po 'offtopico ma potrebbe aiutare qualcuno. Se devi passare password e porta ti suggerisco di usare il sshpasspacchetto. Il comando da riga di comando sarebbe simile al seguente: sshpass -p "password" rsync -avzh -e 'ssh -p PORT312' root@192.xx.xxx.xxx:/dir_on_host/


Questo non funziona perché la tastiera interattiva interagisce con il flusso di dati, corrompendo il protocollo.
Evi1M4chine,

2

Ho trovato questa soluzione sul sito di Mike Hike Hostetler che ha funzionato perfettamente per me.

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

3
e cosa si aggiunge esattamente alla risposta esistente?
Chris Maes,

Bello funziona perfettamente. Grazie :)
Sammu Sundar il

2

La sintassi corretta è dire a Rsync di usare un comando SSH personalizzato (aggiungendo -p 2222), che crea un tunnel sicuro sul lato remoto usando SSH, quindi si connette tramite localhost: 873

rsync -rvz --progress --remove-sent-files -e "ssh -p 2222" ./dir user @ host / path

Rsync funziona come un demone sulla porta TCP 873, che non è sicura.

Dall'uomo Rsync:

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

Che induce in errore le persone a provare questo:

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

Tuttavia, ciò indica che si connette al demone Rsync sulla porta 2222, che non è presente.


altre risposte non menzionarono la porta 873
kevinf l'

la domanda era come farlo funzionare come ssh sulla porta 2222; se rsync lo richiede o meno è una storia diversa.
Dan Steingart,

@DanSteingart Ho aggiornato la risposta, aiuta di più ora?
Kevin Inf

-3

Non sono riuscito a far connettere rsync tramite ssh su una porta diversa, ma sono stato in grado di reindirizzare la connessione ssh al computer che volevo tramite iptables. Questa non è la soluzione che stavo cercando, ma ha risolto il mio problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.