Saya perlu mengeksekusi rsync
, tanpa itu meminta saya untuk kata sandi.
Saya telah melihat di rsync
halaman 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 rsync
terus meminta saya kata sandi.
export RSYNC_PASSWORD="abcdef"
rsync [email protected]:/abc /def
Apa yang saya lakukan salah?
Tolong pertimbangkan:
- Saya mengerti bahwa ini adalah ide yang buruk dari aspek keamanan
- Saya hanya harus menggunakan
rsync
, tidak dapat menggunakan perangkat lunak lain - Saya tidak dapat menggunakan otentikasi berbasis kunci
- Saya sudah membaca banyak pertanyaan SE, misalnya:
bagaimana cara menyampaikan kata sandi untuk rsync-ssh-command @ stackoverflow.com
rsync-cron-job-with-password-@ superuser.com
cara-pengaturan -rsync-tanpa-password-dengan-ssh-on-unix-linux @ superuser.com
Dengan kata lain, saya harus memiliki RSYNC_PASSWORD
pendekatan yang berfungsi! :-)
Jawaban:
Variabel lingkungan kata sandi ini tampaknya hanya digunakan ketika menggunakan protokol rsync:
Agar ini berfungsi, Anda perlu menjalankan rsync sebagai daemon juga (
--daemon
opsi), yang sering dilakukan menggunakaninetd.conf
.Saat menggunakan protokol ini,
abc
harus sesuai dengan target yang ditentukan dalam/etc/rsyncd.conf
. Nama pengguna harus hadir dalamauth users
baris untuk target ini, dan file password harus ditentukan dengansecrets file
pilihan.File rahasia ini yang berisi pemetaan antara nama pengguna dan kata sandi dalam format berikut:
Dan kata sandi inilah yang dapat Anda tentukan menggunakan variabel lingkungan RSYNC_PASSWORD.
sumber
Jika
rsync
daemon 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 menggunakansshpass
:Catat ruang di awal perintah, di
bash
shell ini akan menghentikan perintah (dan kata sandi) dari disimpan dalam sejarah. Saya tidak merekomendasikan menggunakanRSYNC_PASSWORD
variabel 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 menggunakantput reset
untuk menghapus riwayat terminal Anda.sumber
sshpass -p $(cat passFile) ..
untuk menyembunyikan pass yang jelas dalam bash history ,, dan chmod 400 on passFile untuk mengamankannya-p "$RSYNC_PASSWORD"
Anda dapat menggunakan identitas ssh standar untuk melakukan login tanpa kata sandi. Ini ditangani secara default jika Anda memiliki
~/.ssh/id_rsa
atau 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.
Anda juga dapat menambahkan argumen seperti
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
tidak memaksa verifikasi kunci host jarak jauh. Perhatian - yang membuka manusia dalam serangan tengah dan merupakan praktik buruk umum!sumber
~/.ssh
folder 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)Sangat berguna untuk skrip adalah dengan menggunakan
--password-file
opsi baris perintah.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.
sumber