Saya ingin menyinkronkan folder dari mesin saya dengan folder di mesin jarak jauh. Folder jarak jauh hanya dapat dimanipulasi oleh root
. Saya memiliki akun di mesin jarak jauh yang dapat digunakan sudo
. Bagaimana saya bisa menjalankan rsync sehingga memiliki izin root pada mesin remote?
Saya sudah mencoba yang berikut ini:
rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="sudo rsync"
Tapi (setelah memasukkan kata sandi saya) saya mendapatkan kesalahan berikut:
sudo: no tty present and no askpass program specified
Jawaban:
Ini adalah solusi yang saya buat:
Sedikit misi!
sumber
ps aux
). Uji:,rsync -R -avz -e ssh --rsync-path="find / > /dev/null && rsync" server.example.com:/ /tmp/example
lalu buka terminal pada mesin jarak jauh danps aux | grep find
.find /
digunakan hanya karena itu adalah hal pertama yang terlintas di pikiran saya dengan durasi eksekusi yang besar.Coba solusi ini. Di file sudoers Anda (
/etc/sudoers
) atur pengguna Anda seperti ini:yang
NOPASSWD:/usr/bin/rsync
mengatakansudo
bahwa ketika pengguna Anda berjalan/usr/bin/rsync
atau hanyarsync
yang ada password yang dibutuhkan.Maka aslinya Anda
--rsync-path="sudo rsync"
harus bekerja.sumber
Solusi di blog ini bekerja sangat baik untuk saya: http://www.pplux.com/2009/02/07/rsync-root-and-sudo/ .
Pada dasarnya:
Baris pertama memungkinkan entri kata sandi interaktif, tanpa menunjukkan kata sandi di layar. Bekerja sangat bagus untuk saya di Ubuntu 9.04.
sumber
!tty_tickets
.ssh -t [other options]
bukannya bermain-mainstty -echo
?tty_tickets
lagi pula ... jadi saya dapat mencoba pendekatan ini.sudo: no tty present and no askpass program specified
Anda memerlukan metode untuk memasok kata sandi
sudo
. Suatuaskpass
program dirancang untuk meminta kata sandi ketika mekanisme normal tidak tersedia. Menyiapkansudo
untuk tidak memerlukan kata sandi untuk dijalankanrsync
karena userid Anda adalah salah satu opsi.Saya biasanya mengkonfigurasi login berbasis kunci dengan batasan yang tepat untuk kasus-kasus seperti ini. Jika Anda mengonfigurasi kunci terbatas yang hanya dijalankan
rsync
sebagai root, hal semacam ini akan lebih mudah dilakukan. Alternatif lain adalah dengan menggunakanrsycnd
proses untuk menangani permintaan terpencil. Konfigurasi menyediakan berbagai batasan yang dapat diterapkan.EDIT: Saya menyertakan skrip untuk menyiapkan kunci untuk kehilangan berbasis kunci di bagian Membuat Userids pada Klien dari posting saya tentang Menyiapkan BackupPC di Linux . Lihat juga dokumentasi untuk ssh_config yang merinci beberapa hal yang dapat Anda lakukan dengan membatasi penggunaan kunci seperti yang ditunjukkan dalam skrip.
sumber
pada mesin jarak jauh
kemudian pada mesin lokal
gantilah path ke ssh-askpass dengan path aktual pada mesin jarak jauh
sumber: http://unix.bris.ac.uk/2015/08/04/rsync-between-two-hosts-using-sudo-and-a-password-prompt/
sumber
Saya kagum dengan kompleksitas jawaban yang ada. Ini jauh lebih mudah dan nyaman untuk mengkonfigurasi sistem Anda (PC Anda dan remote host) sehingga Anda dapat terhubung sebagai root ke host remote tanpa menggunakan password. Dan tidak seperti kelihatannya itu aman juga .
Hanya saja jangan lupa bahwa selama baris di /root/.ssh/authorized_keys dari host jarak jauh ada mesin itu menerima perintah root dari PC Anda.
sumber
Inilah yang berfungsi untuk saya, mengingat saya ingin tetap menggunakan otentikasi kata sandi (jadi saya tidak ingin menggunakan
NOPASSWD
atau kunci) - di Ubuntu 14.04:sudo
pada mesin jarak jauh dengan menonaktifkantty_tickets
melalui file sementara di/etc/sudoers.d/
(yang harus didukung di Debian, lihat/etc/sudoers.d/README
), dan "Perbarui kredensial cache pengguna", yang "memperpanjang batas waktu sudo selama 15 menit"rsync
dengansudo
seperti yang ditunjukkan pada jawaban lainsudo
pada mesin jarak jauh dengan menghapus file sementara/etc/sudoers.d/
, yang mengaktifkan kembalitty_tickets
... atau, dengan baris perintah:
Ini adalah respons yang saya dapatkan ketika menjalankan perintah ini di komputer lokal:
Catatan yang
sudo -v
harus dijalankan setelah setiap kali file masuk/etc/sudoers.d/
, sehingga perubahan di dalamnya diterima.sumber
Metode lain adalah untuk mengatasi pembatasan izin dengan memulai rsync pada mesin jarak jauh. Dari pada:
Anda dapat melakukan:
Di mana
y.y.y.y
alamat IP mesin lokal Anda. Ini hanya berfungsi jika mesin lokal Anda dapat bertindak sebagai server SSH.sumber
Solusi saya adalah menambahkan
--rsync-path="echo PASSWORD | sudo -Sv && sudo rsync"
contoh:
rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="echo <PASSWORD> | sudo -Sv && sudo rsync"
Biasanya bukan ide yang baik untuk memasukkan kata sandi ke dalam baris perintah satu baris; mereka menjadi terlihat di pohon proses, misalnya. Terkadang saya mengganti kata sandi yang sebenarnya dalam jenis pernyataan ini dengan $ (cat my_password.txt) yang sedikit lebih baik
rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="cat my_password.txt | sudo -Sv && sudo rsync"
sumber