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" [email protected]${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
.