Memaksa rsync ke mode non-interaktif

8

Saya ingin menggunakan rsync dalam skrip python. Saya menyebutnya menggunakan subprocessmodul, dan mengautentikasi menggunakan kunci publik yang tersimpan di authorized_keyfile pada mesin jarak jauh.

Satu-satunya masalah adalah ketika saya menggunakan rsync menggunakan nama pengguna jarak jauh yang salah, saya dimintai kata sandi, yang jelas menghentikan skrip cadangan selamanya.

Bisakah saya memaksa rsyncuntuk keluar dengan kesalahan jika tidak bisa mengautentikasi, daripada meminta kata sandi?

Udi

Adam Matan
sumber

Jawaban:

9

Dengan asumsi Anda menggunakan rsync dengan shell remote SSH (dan tidak - misalnya - dengan server rsync), maka Anda bisa meminta rsync untuk menjalankan SSH dengan cara yang tidak akan pernah meminta kata sandi. Misalnya, sekali dapat menggunakan panggilan ini:

rsync -e 'ssh -o "NumberOfPasswordPrompts 0"' source user@target:/path

Ini akan memaksa rsync untuk menggunakan SSH dengan 0 kemungkinan kata sandi mencoba - jika itu tidak dapat memperoleh akses menggunakan beberapa metode otentikasi lainnya (seperti kunci publik atau GSSAPI) maka itu akan gagal dengan kesalahan. Perhatikan bahwa rsync tidak akan menyukai Anda ketika itu terjadi dan akan mengeluh keras ke STDERR dan putus dengan kode keluar 255.

Guss
sumber
5

Berikut adalah opsi baris perintah untuk ssh yang saya gunakan untuk tetap diam.

ssh -o stricthostkeychecking=no -o userknownhostsfile=/dev/null -o batchmode=yes -o passwordauthentication=no

Anda hanya perlu hal-hal hostkey jika Anda tidak memelihara file known_hosts Anda dan khawatir akan mendapat peringatan MitM. Daripada menentukan jenis otentikasi seperti yang disarankan oleh James F, saya harus secara eksplisit membatasi otentikasi kata sandi. Saya menggunakan ini untuk memukul ratusan host dengan beberapa versi OS yang berbeda, jadi mungkin saja itu adalah ketidakcocokan.

Chad Huneycutt
sumber
1
Tolong JANGAN gunakan pengaturan ini. Lihat bagian 11.5 dari "SSH Oreilly, The Secure Shell: The Definitive Guide, Edisi Kedua". Menurut buku itu: "Sayangnya, melewatkan otentikasi server secara efektif menonaktifkan bagian penting dari keamanan SSH: resistensi terhadap spoofing host server dan serangan man-in-the-middle! Situasi ini juga membuatnya tidak praktis untuk mengganti kunci server secara berkala, seperti yang seharusnya. dilakukan, atau untuk mencabut kunci jika diketahui dikompromikan (yaitu, beritahu klien untuk tidak lagi mempercayainya). "
Mick
1
@Mick: masalah dengan kritik seperti ini adalah bahwa mereka sepenuhnya tidak pantas dalam beberapa konteks. Sebagai contoh, saya bekerja di lingkungan di mana target operasi rsync pada umumnya adalah sejumlah sistem tertanam di jaringan pribadi yang terkubur jauh di dalam lab. Tidak ada konektivitas ke dunia luar sama sekali, dan sistem build harus dapat mendorong kode yang diperbarui ke target. Ini adalah penggunaan ssh dan rsync yang sepenuhnya sah, dan solusi yang jelas adalah mematikan pemeriksaan host. Membuat aturan mutlak tentangnya sama sekali tidak masuk akal.
Stabledog
@Stabledog - Saran saya adalah saran yang benar untuk sebagian besar kasus penggunaan. Namun, saya mengakui bahwa ketika Anda tidak percaya aktor yang buruk dapat secara wajar mendapatkan akses ke jaringan Anda untuk melakukan serangan MiTM, Anda dapat memilih konfigurasi keamanan yang lemah. Konfigurasi keamanan yang diperlukan untuk lingkungan lab (seperti yang Anda sebutkan) jelas akan berbeda dari lingkungan produksi karena risikonya berkurang secara alami.
Mick
Cukup adil. Inilah keprihatinan filosofis, juga praktis: ssh dinilai lebih dari kemampuannya untuk mengamankan , dan pada kenyataannya ... di sebagian besar pengaturan yang pernah saya lihat digunakan, keamanan adalah masalah yang paling tidak penting . Hanya saja swiss-army-knife pilihan untuk koneksi jarak jauh dari semua jenis. Jadi ada keterputusan antara omelan "puritan keamanan", dan cara orang-orang nyata menggunakannya sepanjang waktu dalam cara-cara praktis sehari-hari. Saya tidak percaya bahwa kita semua hanyalah orang bodoh biasa dan kaum puritan "benar". Ini pertanyaan mengetahui kapan harus peduli.
Stabledog
1

re: Saran James (tidak memberikannya tty), untuk subproses, coba letakkan stdin = Tidak ada sebagai parameter untuk Popen.

Adam Brand
sumber
0

Pertama dapatkan rsync untuk bekerja dari shell, perintahnya akan terlihat seperti.

Jika itu gagal men-debug perintah ssh dengan sendirinya. Ketika itu semua berhasil maka lihat apa yang terjadi untuk skrip python

Ini bukan tutorial yang buruk

James
sumber
0

Bergantung pada bagaimana Anda meluncurkan rsync, tidak memberikan TTY atau PTY dapat membantu.

Banyak program memeriksa apakah mereka memiliki TTY yang mengontrol sebelum memutuskan untuk meminta input dari pengguna. Perilaku default sistem () dan panggilan serupa adalah untuk menyediakan tty ke sub-program, tetapi Anda dapat menonaktifkannya.

Dimungkinkan juga untuk menonaktifkan otentikasi kata sandi sepenuhnya di sisi jarak jauh jika Anda mengendalikan kedua sistem dan ingin melepaskan diri dari otentikasi kata sandi untuk manfaat keamanan sambil menyelesaikan masalah ini.

Jika Anda melakukan rsync melalui SSH, Anda dapat menambahkan berikut ini ke file ssh_config Anda untuk host yang dimaksud, atau melalui saklar baris perintah -o:

PreferredAuthentications publickey

Pada tes cepat (hanya ssh, bukan rsync) yang menyebabkan SSH segera keluar ketika kunci publik saya tidak diterima tanpa meminta saya untuk kata sandi.

James F
sumber