Soluzione 1:
A volte pensi troppo alle cose.
Rsync non è stato installato sul sistema remoto.
/facepalm
Soluzione 2:
Metto questo qui così posso ricordare e condividere questo trucco:
rsync -av -e "ssh -tt" --rsync-path="stty raw -echo; sudo /usr/bin/rsync" [email protected]${HOSTNAME}:/ ${DEST_DIR}
Questo metodo sembra ignorare il requisito per un tty applicato al /etc/sudoers
predefinito di alcuni sistemi file con Defaults requiretty
. Queste informazioni sono state create dopo aver esaminato questa domanda e risposta SO.
In quella risposta, consigliano di rimuovere Defaults requiretty
da /etc/sudoers
. Questo è il metodo più semplice. Tuttavia, se non sei in grado di modificare l'host remoto /etc/sudoers
per rimuovere questa opzione di configurazione, puoi provare a forzare il rsync
locale per usare ssh -tt
. Questa opzione per ssh
è descritto nel ssh
pagina di manuale del client come questa:
Forza l'allocazione pseudo-terminale. Questo può essere utilizzato per eseguire programmi basati su schermo arbitrari su una macchina remota, che può essere molto utile, ad es. quando si implementano i servizi di menu. Molteplici opzioni -t forzano l'allocazione tty, anche se ssh non ha tty locale.
Quindi forziamo ssh ad allocare una pseudo-tty per evitare l'errore:
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
Quindi, il --rsync-path
è sovrascritto con un comando per fare quanto segue:
stty raw -echo; sudo /usr/bin/rsync
stty raw -echo
consiste nell'impostare la disciplina di linea del terminale remoto come passante. Ciò fa sì che si comporti effettivamente come una pipe che verrebbe utilizzata al posto di uno pseudo-terminale senza -tt
.
Quindi il comando rsync remoto sarà sudo /usr/bin/rsync
, che ora ha uno pseudo-tty e passerà il requiretty
controlla sudo
.