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 [email protected]:/abc /def

Apa yang saya lakukan salah?

Tolong pertimbangkan:

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

Dor
sumber
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://[email protected]:/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.

brm
sumber
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 [email protected]:/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.

Graeme
sumber
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!

Eddie
sumber
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.

Arunas Bartisius
sumber
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