Ich möchte einen Ordner von meinem Computer mit einem Ordner auf einem Remote-Computer synchronisieren. Der entfernte Ordner kann nur von manipuliert werden root
. Ich habe ein Konto auf dem Remote-Computer, das verwendet werden kann sudo
. Wie kann ich rsync so ausführen, dass es Root-Berechtigungen auf dem Remotecomputer hat?
Ich habe Folgendes versucht:
rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="sudo rsync"
Aber (nachdem ich mein Passwort eingegeben habe) bekomme ich folgende Fehlermeldung:
sudo: no tty present and no askpass program specified
Antworten:
Dies ist die Lösung, die ich mir ausgedacht habe:
Eine kleine Mission!
quelle
ps aux
. B. ). Testrsync -R -avz -e ssh --rsync-path="find / > /dev/null && rsync" server.example.com:/ /tmp/example
:, öffnen Sie dann das Terminal auf der Remote-Maschine undps aux | grep find
.find /
wird nur verwendet, da es das erste ist, was mir mit großer Ausführungsdauer in den Sinn gekommen ist.Versuchen Sie diese Lösung. In Ihrer sudoers-Datei (
/etc/sudoers
) richten Sie Ihren Benutzer folgendermaßen ein:Das
NOPASSWD:/usr/bin/rsync
sagt,sudo
dass, wenn Ihr Benutzer ausgeführt wird/usr/bin/rsync
oder nur,rsync
dass kein Kennwort benötigt wird.Dann sollte Ihr Original
--rsync-path="sudo rsync"
funktionieren.quelle
Die Lösung in diesem Blog hat für mich sehr gut funktioniert: http://www.pplux.com/2009/02/07/rsync-root-and-sudo/ .
Grundsätzlich gilt:
In der ersten Zeile kann ein interaktives Kennwort eingegeben werden, ohne dass das Kennwort auf dem Bildschirm angezeigt wird. Funktioniert hervorragend für Ubuntu 9.04.
quelle
!tty_tickets
.ssh -t [other options]
statt mit zu spielenstty -echo
?tty_tickets
sowieso ... damit ich diesen Ansatz probieren kann.sudo: no tty present and no askpass program specified
Sie benötigen eine Methode, um das Kennwort für anzugeben
sudo
. Einaskpass
Programm fragt nach Passwörtern, wenn die normalen Mechanismen nicht verfügbar sind. Das Einrichtensudo
, dass kein Kennwort erforderlich ist, umrsync
als Benutzer-ID ausgeführt zu werden, ist eine Option.Normalerweise konfiguriere ich die schlüsselbasierte Anmeldung mit entsprechenden Einschränkungen für Fälle wie diesen. Wenn Sie einen eingeschränkten Schlüssel konfigurieren, der nur
rsync
als Root ausgeführt wird, ist dies einfacher. Eine andere Alternative besteht darin, einenrsycnd
Prozess zum Behandeln der Remote-Anforderungen zu verwenden. Die Konfiguration bietet eine Reihe von Einschränkungen, die angewendet werden können.BEARBEITEN: Ich habe ein Skript zum Einrichten von Schlüsseln für schlüsselbasierte Loings in den Abschnitt Erstellen von Benutzer-IDs auf Clients in meinem Beitrag zum Einrichten von BackupPC unter Linux aufgenommen . Siehe auch die Dokumentation zu ssh_config, in der einige der im Skript gezeigten Möglichkeiten zur Einschränkung der Schlüsselverwendung beschrieben sind.
quelle
auf Remote-Maschine
dann auf lokaler Maschine
Ersetzen Sie den Pfad zu ssh-askpass durch den tatsächlichen Pfad auf dem Remotecomputer
Quelle: http://unix.bris.ac.uk/2015/08/04/rsync-between-two-hosts-using-sudo-and-a-password-prompt/
quelle
Ich bin erstaunt über die Komplexität der vorhandenen Antworten. Es ist viel einfacher und bequemer, Ihre Systeme (Ihren PC und den Remote-Host) so zu konfigurieren, dass Sie als Root ohne Kennwort eine Verbindung zum Remote-Host herstellen können. Und anders als es aussieht, ist es auch sicher .
Vergessen Sie jedoch nicht, dass der Computer Root-Befehle von Ihrem PC akzeptiert, solange die Zeile in /root/.ssh/authorized_keys des Remote-Hosts vorhanden ist.
quelle
Hier ist, was bei mir funktioniert hat, wenn ich bedenke, dass ich die Kennwortauthentifizierung beibehalten möchte (damit ich weder
NOPASSWD
Schlüssel noch Schlüssel verwenden möchte ) - unter Ubuntu 14.04:sudo
Remote-Computer, indem Sie ihntty_tickets
über eine temporäre Datei in deaktivieren/etc/sudoers.d/
(die unter Debian unterstützt werden sollte, siehe/etc/sudoers.d/README
) und "Aktualisieren Sie die zwischengespeicherten Anmeldeinformationen des Benutzers", wodurch "das Sudo-Timeout um weitere 15 Minuten verlängert wird".rsync
mitsudo
wie in anderen Antworten gezeigt aussudo
auf dem Remotecomputer durch Entfernen der temporären Datei/etc/sudoers.d/
, die erneut aktiviert wirdtty_tickets
... oder mit Kommandozeilen:
Dies sind die Antworten, die ich bekomme, wenn ich diese Befehle auf dem lokalen Computer ausführe:
Beachten Sie, dass
sudo -v
nach jedem Einspielen von Dateien ausgeführt werden sollte/etc/sudoers.d/
, damit die darin vorgenommenen Änderungen akzeptiert werden.quelle
Eine andere Methode besteht darin, die Berechtigungsbeschränkungen zu umgehen, indem Sie rsync auf dem Remotecomputer starten. Anstatt von:
Du kannst tun:
Wo
y.y.y.y
ist die IP-Adresse Ihres lokalen Computers? Dies funktioniert nur, wenn Ihr lokaler Computer als SSH-Server fungieren kann.quelle
Mein Workuround ist das Hinzufügen
--rsync-path="echo PASSWORD | sudo -Sv && sudo rsync"
Beispiel:
rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="echo <PASSWORD> | sudo -Sv && sudo rsync"
In der Regel ist es keine gute Idee, Kennwörter einzeilig in die Befehlszeile einzufügen. Sie werden beispielsweise im Prozessbaum sichtbar. Ich ersetze manchmal das eigentliche Passwort in dieser Art von Anweisung durch $ (cat my_password.txt), was etwas besser ist
rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="cat my_password.txt | sudo -Sv && sudo rsync"
quelle