Come eseguire una sincronizzazione sicura tra server attraverso una rete non protetta


19

Fondamentalmente quello che sto chiedendo è che qualcuno abbia trovato un modo per avvolgere rsync in ssh.

Con OpenSSH v4.9 + sftp ha alcune belle opzioni che ti permettono di bloccare la connessione in entrata e simili - e questa è una soluzione che vorrei prendere in considerazione, tuttavia sono bloccato con RHEL, e né RHEL4 o RHEL5 sono all'altezza di quella versione di ssh.

La mia soluzione attuale è quella di aggiungere qualcosa di simile al lato server usando la chiave dell'utente client ...

server% cat ~ / .ssh / authorized_keys
command = "cd / srv / rsync / etl && tar --exclude './lost+found' -pcf - ./" ssh-rsa ...

... e quindi il cliente sarebbe quindi limitato a una cosa e una cosa sola ...

client% ssh -T -i $ {HOME} /. ssh / id_rsa oracle@database.com> sensative.tar

Ciò protegge la connessione, così come il server (dal client), tuttavia è inefficiente in quanto tutti i file verranno recuperati più e più volte.

Sto dopo aver fatto qualcosa di simile (o semplicemente migliore) usando rsync.

Risposte:


18

Rsync supporta l'utilizzo di ssh come trasporto

rsync -az /path/to/source username@host:/path/to/destination

alcune versioni precedenti di rsync richiedono di specificare esplicitamente ssh

rsync -aze ssh /path/to/source host:/path/to/destination

Un'alternativa all'utilizzo di rsync è BC Pierce's Unison , che ha funzionalità simili a rsync, ma mantiene un indice locale su entrambe le estremità per evitare di dover camminare sul filesystem per calcolare i delta


Grazie per la risposta veloce! Avrei dovuto menzionare che ho indagato anche questo - il problema (nel mio caso) è che non limita / elimina l'utente. Se fosse possibile parlare con il servizio rsync tramite ssh (cioè usando la sintassi a due punti di definizione del telecomando) - sarebbe perfetto - ma quanto sopra funziona solo con i due punti - cioè via ssh, e quindi senza chrooting.
Serse

Ho dimenticato di menzionare - Unison sembra carino, e terrò un collegamento ad esso - comunque in questo caso - non sono in grado di installare nulla al di fuori di quello offerto da RHN - che è zoppo, ma fuori dal mio controllo.
Serse

Un'altra limitazione che dovrei menzionare è che la connessione deve essere avviata dal client - il lato <i> pull </i> e non il server. (Il push sul lato server sarebbe naturalmente facile proteggere il server poiché il client non ha voce in capitolo, ma non è applicabile al mio problema attuale).
Serse

1
rsync -az server: / path / path / on / client?
Dave Cheney,

1
Perché il chroot? Sai che un chroot non migliora davvero tanto la sicurezza. Inoltre, se si esce già fornendo ssh, rsync su ssh non riduce la sicurezza del sistema. Pensaci anche che ciò che fa rsync su ssh è invocare il binario rsync sul server. Puoi proteggerlo nello stesso modo in cui proteggi il tuo comando di copia.
Paul de Vrieze,

5

Ok, alla fine l'ho capito, ma la soluzione non è elegante come avevo sperato.

Sul lato server, è necessario aggiungere quanto segue al file authorized_keys per l'utente pertinente ...

no-pty, command="exit"

Sul client, è quindi possibile creare un tunnel come segue ...

ssh -l username -fNTL 8073:server:873

Una volta stabilito il tunnel, è possibile risincronizzare come al solito - non è possibile utilizzare la sintassi dei due punti - su localhost.

Il numero di porta localhost selezionato (8073) è del tutto facoltativo, ovviamente, ricorda che è quello che devi sincronizzare per ...

rsync --port=8073 -a user@localhost::mySecureStore /srv/some/place/

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.