Rsync prin ssh cu acces root pe ambele părți (Administrarea sistemului, Ubuntu, Ssh, Debian, Rsync, Root)

Tim Abell a intrebat.

Am un server Ubuntu mai vechi și un server Debian mai nou și migrez datele de pe cel vechi pe cel nou. Vreau să folosesc rsync pentru a transfera datele între ele pentru a face migrarea finală mai ușoară și mai rapidă decât procesul echivalent tar/scp/untar.

Ca exemplu, vreau să sincronizez dosarele de acasă, unul câte unul, pe noul server. Acest lucru necesită acces root la ambele capete, deoarece nu toate fișierele de pe partea sursă pot fi citite la nivel mondial, iar la destinație trebuie să fie scrise cu permisiuni corecte în /home. Nu reușesc să îmi dau seama cum să dau rsync acces root pe ambele părți.

Am văzut câteva întrebări conexe, dar niciuna nu se potrivește cu ceea ce încerc să fac eu.

Am sudo configurat și funcționează pe ambele servere.

3 răspunsuri
Caleb

De fapt, NU trebuie să permiteți autentificarea root prin SSH pentru a rula rsync așa cum sugerează Antoine. Transportul și autentificarea sistemului se poate face în întregime prin conturi de utilizator, atâta timp cât puteți rula rsync cu sudo la ambele capete pentru citirea și scrierea fișierelor.

În calitate de utilizator pe serverul de destinație, puteți prelua datele de pe serverul sursă astfel:

sudo rsync -aPe ssh --rsync-path='sudo rsync' boron:/home/fred /home/

Utilizatorul cu care rulezi pe ambele servere va avea nevoie de acces sudo fără parolă* la binarul rsync, dar NU trebuie să activezi nicăieri autentificarea ssh ca root. Dacă utilizatorul pe care îl folosiți nu se potrivește la celălalt capăt, puteți adăuga [email protected]: pentru a specifica un alt utilizator la distanță.

Mult noroc.

*sau va trebui să fi introdus manual parola în interiorul ferestrei de timeout.

Comentarii

  • Deși aceasta este o întrebare veche, aș dori să adaug un cuvânt de ATENȚIE la acest răspuns acceptat. Din câte am înțeles eu, a permite „sudo rsync” fără parolă este echivalent cu deschiderea contului root pentru autentificarea de la distanță. Acest lucru se datorează faptului că, prin aceasta, este foarte ușor să se obțină acces complet de root, de exemplu, deoarece toate fișierele de sistem pot fi descărcate, modificate și înlocuite fără parolă. –  > Por Ascurion.
Jeroen Moors

Dacă datele dvs. nu sunt foarte sensibile, ați putea utiliza tar și socat. Din experiența mea, acest lucru este adesea mai rapid decât rsync prin ssh.

Aveți nevoie de socat sau netcat pe ambele părți.

Pe gazda țintă, mergeți la directorul în care doriți să puneți datele, după care rulați:
socat TCP-LISTEN:4444 - | tar xzf -

Dacă gazda țintă este în ascultare, porniți-l pe sursa, de exemplu:
tar czf - /home/fred /home/ | socat - TCP:ip-of-remote-server:4444

Pentru această configurație veți avea nevoie de o conexiune fiabilă între cele 2 servere.

Comentarii

  • Bună observație. Într-un mediu de încredere, veți câștiga multă viteză dacă nu criptați. S-ar putea să nu conteze în cazul fișierelor mici, dar cu GB de date va conta. –  > Por pboin.
Tim Abell

Ok, am pus cap la cap toate indiciile pentru a obține ceva care funcționează pentru mine.

Să numim serverele „src” & „dst”.

Configurați o pereche de chei pentru root pe serverul de destinație și copiați cheia publică pe serverul sursă:

dest $ sudo -i
dest # ssh-keygen
dest # exit
dest $ scp /root/id_rsa.pub src:

Adăugați cheia publică la cheile autorizate ale lui root pe serverul sursă.

src $ sudo -i
src # cp /home/tim/id_rsa.pub .ssh/authorized_keys

Înapoi pe serverul de destinație, extrageți datele cu rsync:

dest $ sudo -i
dest # rsync -aP src:/home/fred /home/