Lösung 1:
Manchmal denkt man zu viel über Dinge nach.
Rsync wurde nicht auf dem Remote-System installiert.
/facepalm
Lösung 2:
Ich füge das hier ein, damit ich mich an diesen Trick erinnern und ihn teilen kann:
rsync -av -e "ssh -tt" --rsync-path="stty raw -echo; sudo /usr/bin/rsync" [email protected]${HOSTNAME}:/ ${DEST_DIR}
Diese Methode scheint die Anforderung für ein tty zu umgehen, wie es auf dem Standard /etc/sudoers
einiger Systeme erzwungen wird Datei mit Defaults requiretty
. Diese Informationen wurden nach Überprüfung dieser SO-Frage und -Antworten erstellt.
In dieser Antwort empfehlen sie, Defaults requiretty
zu entfernen ab /etc/sudoers
. Dies ist die einfachere Methode. Wenn Sie jedoch den Remote-Host /etc/sudoers
nicht ändern können Um diese Konfigurationsoption zu entfernen, können Sie versuchen, den lokalen rsync
zu erzwingen um ssh -tt
zu verwenden . Diese Option für ssh
ist in ssh
beschrieben Client-Handbuchseite wie folgt:
Pseudo-Terminal-Zuordnung erzwingen. Dies kann verwendet werden, um beliebige bildschirmbasierte Programme auf einem entfernten Computer auszuführen, was sehr nützlich sein kann, z. beim Implementieren von Menüdiensten. Mehrere -t-Optionen erzwingen eine tty-Zuordnung, selbst wenn ssh kein lokales tty hat.
Daher zwingen wir ssh, ein Pseudo-TTY zuzuweisen, um den Fehler zu vermeiden:
Pseudo-terminal will not be allocated because stdin is not a terminal.
stty: standard input: Inappropriate ioctl for device
sudo: sorry, you must have a tty to run sudo
Dann die --rsync-path
wird mit einem Befehl überschrieben, der Folgendes ausführt:
stty raw -echo; sudo /usr/bin/rsync
stty raw -echo
ist, die Leitungsdisziplin der Gegenstelle auf Pass Through einzustellen. Dies bewirkt effektiv, dass es sich wie eine Pipe verhält, die anstelle eines Pseudo-Terminals ohne -tt
verwendet würde .
Dann lautet der Remote-rsync-Befehl sudo /usr/bin/rsync
, das jetzt ein Pseudo-tty hat und den requiretty
weitergibt Suchen Sie nach sudo
.