Solusi 1:
Terkadang Anda berpikir terlalu keras tentang berbagai hal.
Rsync tidak diinstal pada sistem jarak jauh.
/wajah
Solusi 2:
Letakkan ini di sini agar saya dapat mengingat &membagikan trik ini:
rsync -av -e "ssh -tt" --rsync-path="stty raw -echo; sudo /usr/bin/rsync" example@unixlinux.online${HOSTNAME}:/ ${DEST_DIR}
Metode ini tampaknya melewati persyaratan untuk tty seperti yang diterapkan pada /etc/sudoers default beberapa sistem file dengan Defaults requiretty . Informasi ini dibuat setelah meninjau pertanyaan &jawaban SO ini.
Dalam jawaban itu, mereka merekomendasikan untuk menghapus Defaults requiretty dari /etc/sudoers . Ini adalah metode yang lebih mudah. Namun, jika Anda tidak dapat mengubah host jarak jauh /etc/sudoers untuk menghapus opsi konfigurasi ini, Anda dapat mencoba memaksa rsync lokal untuk menggunakan ssh -tt . Opsi ini untuk ssh dijelaskan dalam ssh halaman manual klien seperti ini:
Paksa alokasi terminal semu. Ini dapat digunakan untuk menjalankan program berbasis layar sewenang-wenang pada mesin jarak jauh, yang bisa sangat berguna, mis. saat mengimplementasikan layanan menu. Beberapa opsi -t memaksa alokasi tty, bahkan jika ssh tidak memiliki tty lokal.
Jadi, kami memaksa ssh untuk mengalokasikan pseudo-tty untuk menghindari kesalahan:
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
Lalu, --rsync-path diganti dengan perintah untuk melakukan hal berikut:
stty raw -echo; sudo /usr/bin/rsync
stty raw -echo adalah untuk mengatur disiplin garis dari terminal jarak jauh sebagai pass through. Ini secara efektif menyebabkannya berperilaku seperti pipa yang akan digunakan alih-alih terminal semu tanpa -tt .
Maka perintah rsync jarak jauh akan menjadi sudo /usr/bin/rsync , yang sekarang memiliki pseudo-tty dan akan meneruskan requiretty periksa sudo .