Bagaimana saya bisa rsync tanpa meminta kata sandi, tanpa menggunakan otentikasi kunci publik?


44

Saya perlu mengeksekusi rsync, tanpa itu meminta saya untuk kata sandi.

Saya telah melihat di rsynchalaman manual bahwa itu tidak memungkinkan menentukan kata sandi sebagai argumen baris perintah.
Tapi saya perhatikan bahwa itu memungkinkan menentukan kata sandi melalui variabel RSYNC_PASSWORD.

Jadi saya sudah mencoba mengekspor variabel, tetapi rsyncterus meminta saya kata sandi.

export RSYNC_PASSWORD="abcdef"
rsync root@1.2.3.4:/abc /def

Apa yang saya lakukan salah?

Tolong pertimbangkan:

Dengan kata lain, saya harus memiliki RSYNC_PASSWORDpendekatan yang berfungsi! :-)


sudahkah Anda mengaktifkan daemon rsync di server jauh?
Rahul Patil

Jawaban:


13

Variabel lingkungan kata sandi ini tampaknya hanya digunakan ketika menggunakan protokol rsync:

rsync rsync://username@1.2.3.4:/abc /def

Agar ini berfungsi, Anda perlu menjalankan rsync sebagai daemon juga ( --daemonopsi), yang sering dilakukan menggunakan inetd.conf.

Saat menggunakan protokol ini, abcharus sesuai dengan target yang ditentukan dalam /etc/rsyncd.conf. Nama pengguna harus hadir dalam auth usersbaris untuk target ini, dan file password harus ditentukan dengan secrets filepilihan.

File rahasia ini yang berisi pemetaan antara nama pengguna dan kata sandi dalam format berikut:

username:password

Dan kata sandi inilah yang dapat Anda tentukan menggunakan variabel lingkungan RSYNC_PASSWORD.


cara cepat untuk menjalankan server rsync adalah dengan https://s3.amazonaws.com/skaperen/rsend
Skaperen

65

Jika rsyncdaemon tidak berjalan di mesin target, dan Anda tidak peduli mengekspos kata sandi kepada semua orang di mesin lokal ( Mengapa seseorang tidak boleh menggunakan kata sandi di baris perintah? ), Anda dapat menggunakan sshpass:

 sshpass -p "password" rsync root@1.2.3.4:/abc /def

Catat ruang di awal perintah, di bashshell ini akan menghentikan perintah (dan kata sandi) dari disimpan dalam sejarah. Saya tidak merekomendasikan menggunakan RSYNC_PASSWORDvariabel kecuali benar-benar diperlukan (sesuai dengan edit sebelumnya untuk jawaban ini), saya sarankan menekan penyimpanan histori atau setidaknya membersihkan histori setelahnya. Selain itu, Anda dapat menggunakan tput resetuntuk menghapus riwayat terminal Anda.


2
Mengapa Anda menyarankan menambahkan kata sandi yang kosong pada perintah, itu admin linux buruk 101.
Eddie

Sangat berguna .. telah mencari pendekatan untuk ini untuk sementara waktu. Terima kasih.
Isaac Gregson

6
Meskipun menambahkan kata sandi sebagai teks yang tidak baik adalah buruk, saat ini satu-satunya cara yang cukup sederhana untuk ini.
Weston Ganger

15
Anda selalu dapat melakukan sesuatu seperti ini: sshpass -p $(cat passFile) ..untuk menyembunyikan pass yang jelas dalam bash history ,, dan chmod 400 on passFile untuk mengamankannya
Kresimir Pendic

3
Saya tahu ini sudah lama, tetapi demi pembaca yang lebih baru, silakan kutip kata sandinya - kata sandi dapat berisi karakter dan spasi khusus. -p "$RSYNC_PASSWORD"
Paddy Landau

16

Anda dapat menggunakan identitas ssh standar untuk melakukan login tanpa kata sandi. Ini ditangani secara default jika Anda memiliki ~/.ssh/id_rsaatau sejenisnya, tetapi Anda juga dapat meng-hardcode path Anda sendiri ke kunci pribadi dari keypair yang diotorisasi.

Ini memungkinkan batching / scripting tanpa memaparkan kata sandi, dan kunci publik dapat dihapus dari server target jika kunci pribadi pernah dikompromikan.

rsync -e"ssh -i /path/to/privateKey" -avR $sourcedir ${ruser}@${rhost}:~/${rdir}/

Anda juga dapat menambahkan argumen seperti -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nulltidak memaksa verifikasi kunci host jarak jauh. Perhatian - yang membuka manusia dalam serangan tengah dan merupakan praktik buruk umum!


1
Ini sangat berguna jika Anda menggunakan Bash shell baru untuk Windows 10. Saya bertanya-tanya mengapa rsync tidak berfungsi tanpa kata sandi. Saya menyadari itu menggunakan ~/.sshfolder di dalam shell (tempat rsync tinggal). Setelah saya menggunakan -e untuk menunjuk ke kunci di dalam /mnt/c/Users/MyUsername/.ssh, itu berfungsi seperti yang diharapkan. (Terima kasih.: D)
Toby Deshane

12

Sangat berguna untuk skrip adalah dengan menggunakan --password-fileopsi baris perintah.

  • Buat file kosong yang disebut rsync_pass
  • tulis kata sandi ke file ini (tidak lebih)
  • chmod 600 rsync_pass
  • rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory

Ini dapat digunakan untuk skrip dan memungkinkan untuk lebih aman bahwa hanya mengekspor kata sandi ke variabel sistem.


4
Catatan untuk pembaca: ini juga memerlukan daemon rsync yang berjalan di server. Saya benar-benar berharap bahwa kunci ssh akan cukup untuk rsync tanpa kata sandi.
Sridhar Sarnobat

IMHO ini adalah satu-satunya cara yang benar untuk melakukannya jika seseorang tidak ingin menggunakan ssh.
maxf130

Jawaban ini paling masuk akal
AJ Meyghani
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.