Řešení 1:
Někdy o věcech příliš přemýšlíte.
Rsync nebyl nainstalován na vzdáleném systému.
/facepalm
Řešení 2:
Dávám to sem, abych si zapamatoval a sdílel tento trik:
rsync -av -e "ssh -tt" --rsync-path="stty raw -echo; sudo /usr/bin/rsync" [email protected]${HOSTNAME}:/ ${DEST_DIR}
Zdá se, že tato metoda obchází požadavek na tty vynucený na výchozím nastavení některých systémů /etc/sudoers
soubor s Defaults requiretty
. Tyto informace byly vytvořeny po přečtení této otázky a odpovědí SO.
V této odpovědi doporučují odstranit Defaults requiretty
od /etc/sudoers
. Toto je ta jednodušší metoda. Pokud však nemůžete upravit vzdáleného hostitele /etc/sudoers
Chcete-li tuto možnost konfigurace odstranit, můžete zkusit vynutit místní rsync
použít ssh -tt
. Tato možnost pro ssh
je popsán v ssh
manuálovou stránku klienta, jako je tato:
Vynutit přidělení pseudoterminálu. Toho lze použít ke spouštění libovolných obrazovkových programů na vzdáleném počítači, což může být velmi užitečné, např. při implementaci služeb nabídky. Více možností -t vynutí alokaci tty, i když ssh nemá žádné místní tty.
Vynutíme tedy ssh, aby přidělil pseudo-tty, abychom se vyhnuli chybě:
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
Poté --rsync-path
je přepsán příkazem k provedení následujícího:
stty raw -echo; sudo /usr/bin/rsync
stty raw -echo
je nastavit disciplínu linky vzdáleného terminálu jako průchozí. To efektivně způsobí, že se bude chovat jako roura, která by byla použita místo pseudoterminálu bez -tt
.
Potom bude vzdálený příkaz rsync sudo /usr/bin/rsync
, který má nyní pseudo-tty a předá requiretty
zkontrolujte sudo
.