Verwenden von rsync mit sudo auf dem Zielcomputer

39

Bei dem Problem, dass rsync UID und GID nicht wie erwartet festlegt, rsyncsollte meines Erachtens so wie rootauf dem Zielcomputer ausgeführt werden.

Ich kann mich nicht rootüber SSH anmelden , da dies aus Sicherheitsgründen deaktiviert ist. Der Benutzer auf dem Zielcomputer kann verwenden sudo.

Ist es möglich, rsyncmit zu verwenden sudo?

Thomas Weller
quelle

Antworten:

68

Auf dem Zielcomputer

  1. Finden Sie den Pfad zu rsync:which rsync
  2. Bearbeiten Sie die /etc/sudoersDatei: sudo visudo(Siehe auch: Muss ich Visudo verwenden? )
  3. Fügen Sie die Zeile hinzu <username> ALL=NOPASSWD:<path to rsync>, in der Benutzername der Anmeldename des Benutzers ist, mit dem sich rsync anmeldet. Dieser Benutzer muss verwenden könnensudo

Geben Sie dann auf dem Quellcomputer an, dass sudo rsyncFolgendes verwendet werden soll:

rsync ... --rsync-path="sudo rsync" ...

Wenn Sie es ohne das NOPASSWDauf dem Zielcomputer installierte Symbol verwenden, wird die Meldung angezeigt

sudo: keine tty vorhanden und kein askpass programm angegeben

Thomas Weller
quelle
Was ist die Änderung daran, die es jedem Benutzer in einer bestimmten Gruppe ermöglichen würde, dies zu tun? Gibt es anstelle von <Benutzername> eine <Gruppenname> -Version?
Brian
3
Danke, nur ich pki so habe ich-e="ssh -i $PRIVATE_KEY_PATH" --rsync-path="sudo rsync"
AT
1
Natürlich kann <Benutzername> jetzt mit rsync alles als root lesen / schreiben, lokal und remote. Der Teil, in dem es aus Sicherheitsgründen nicht möglich ist, sich als root anzumelden, ist also ein bisschen umstritten ... im Grunde tun Sie das jetzt .
hmn
1
Erhalten Sie immer noch den Fehler "not tty present ...", nachdem Sie diese Anweisungen befolgt haben? Ich war. Vergewissern Sie sich, dass die Zeile, die ich hinzugefügt habe, /etc/sudoersam Ende der Datei steht (oder nachdem Gruppenregeln, die denselben Benutzer betreffen könnten), das Problem für mich gelöst hat.
CPBL
1
Ich verwende diese Lösung, möchte aber die Sicherheit verbessern, indem ich die Argumente einschränke, die der Benutzer auf dem Zielserver an rsync übergeben kann. Normalerweise würde ich die Argumente einschränken, die verwendet werden können, <username> ALL=NOPASSWD:<path to rsync> <args>aber ich weiß nicht, wie die Argumente lauten, wenn sie aus der Ferne wie folgt aufgerufen werden. Irgendwelche Ideen?
Pete Cornell
3

Sie können sich vom Remote-Sudo über X-Windows nach Ihrem Passwort fragen lassen. Hier ist eine Möglichkeit, dies zu tun:

  1. Stellen Sie sicher ssh-askpass, dass auf dem Remote-Host installiert ist (und dass Sie natürlich X-Windows verwenden)
  2. Stellen Sie sicher, dass dies in /etc/sudo.conf:
# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass
  1. Fügen Sie diese Optionen zu rsync hinzu: -e "ssh -X" --rsync-path="sudo -A rsync"

    • ssh -X leitet Ihre X-Windows-Informationen und den Port an Ihre Remote-Sitzung weiter
    • sudo -A wird sudo veranlassen, ssh-askpass zu verwenden, um Sie nach Ihrem Passwort zu fragen
Bill Burdick
quelle
Funktioniert auf Ubuntu 18; Erstelle /etc/sudo.conf (falls es noch nicht existiert) auf dem Ziel m / c
Snidhi Sofpro
0

Meine Lösung ist zu verwenden --rsync-path="sudo rsync", wenn es nach einem Passwort fragt, können Sie die folgende Problemumgehung verwenden:

rsync -avz --stats --rsync-path="echo <SUDOPASS> | sudo -Sv && sudo rsync"  [email protected]:/ .

Dies ist jedoch nicht sicher, um ein Kennwort in die Befehlszeile einzufügen.

Bulat
quelle