Saat mengikuti petunjuk untuk melakukan backup rsync yang diberikan di sini: http://troy.jdmz.net/rsync/index.html
Saya mendapatkan kesalahan "versi protokol tidak cocok - apakah shell Anda bersih?"
Saya membaca di suatu tempat bahwa saya perlu membungkam tampilan prompt (PS1 = "") dan motd (.hushlogin) untuk menangani ini. Saya telah melakukan ini, prompt dan banner masuk (MOTD) tidak lagi muncul, tetapi kesalahan masih muncul ketika saya menjalankan:
rsync -avvvz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" remoteuser@remotehost:/remote/dir /this/dir/
Baik ssh client maupun sshd server menggunakan versi 2 protokol.
Apa yang bisa menjadi masalah? Terima kasih.
[EDIT] Saya telah menemukan http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html yang mengarahkan bahwa kadang-kadang diperlukan untuk "Memaksa v2 dengan menggunakan flag -2 ke ssh atau slogin
ssh -2 -i ~/.ssh/my_private_key remotemachine"
Tidak jelas ini menyelesaikan masalah karena saya pikir saya menempatkan perubahan ini SETELAH kesalahan berubah tetapi faktanya kesalahan telah berkembang menjadi sesuatu yang lain. Saya akan memperbarui ini ketika saya belajar lebih banyak. Dan saya pasti akan mencoba saran untuk menjalankan ini di shell emacs - terima kasih.
ESC x shell
, dan lakukanexport TERM=xterm; ssh remotehost ls
. Jika ada karakter kontrol atau output palsu lainnya muncul, itulah yang harus Anda cari.--rsync-path
) tidak mengubah apa pun untuk saya.Jawaban:
Salah satu skrip login Anda (.bashrc / .cshrc / etc.) Mungkin mengeluarkan data ke terminal (padahal seharusnya tidak). Ini menyebabkan ssh salah ketika terhubung dan bersiap-siap untuk menyalin ketika mulai menerima data tambahan yang tidak diharapkan. Hapus output yang dihasilkan dalam skrip startup.
Anda dapat memeriksa apakah terminal Anda interaktif dan hanya menghasilkan teks dengan menggunakan kode berikut dalam bashrc. Sesuatu yang setara juga ada untuk shell lainnya:
atau sebagai alternatif, seperti ini, karena parameter khusus
-
berisii
ketika shell bersifat interaktif:Untuk informasi lebih lanjut, lihat: rsync via ssh dari linux ke windows sbs 2003 protokol mismatch
Untuk mendiagnosis ini, pastikan bahwa berikut ini adalah output yang Anda dapatkan ketika Anda ssh in ke host:
Jika Anda mendapatkan baris baru atau data lain, Anda tahu bahwa output tambahan sedang dikirim. Anda dapat mengganti nama .bashrc / .cshrc / .profile / etc. file ke sesuatu yang lain sehingga mereka tidak akan menampilkan output tambahan. Tentu saja masih ada file sistem yang dapat menyebabkan ini. Dalam hal ini, periksa dengan sysadmin Anda bahwa file sistem tidak menampilkan data.
sumber
echo
di~/.bashrc
, Thx. Anda membuat hari sayaAda cara sederhana untuk menguji apakah shell Anda bersih, untuk koneksi ssh: jalankan perintah dari koneksi ssh, daripada memulai shell interaktif. The
false
perintah akan segera mengakhiri tanpa menghasilkan output apapun, sehingga merupakan tes yang baik:Jika baris perintah itu menghasilkan output apa pun, salah satu skrip startup Anda adalah yang harus disalahkan:
Hal lain untuk memeriksa apakah Anda mendapatkan kesalahan ini adalah apakah rsync diinstal dan dapat dilacak oleh ssh:
Jika rsync tidak ada di jalur, Anda akan melihat sesuatu seperti:
Anda dapat memperbaikinya dengan menginstal rsync, atau jika diinstal tetapi di lokasi yang tidak biasa, meneruskan lokasi ke baris perintah rsync:
sumber
Ini biasanya disebabkan oleh barang-barang login shell Anda yang menghasilkan barang-barang di shell non-interaktif. Anda dapat menguji apakah ini masalahnya dengan melakukan:
Jika testfile BUKAN 0 byte, maka masalahnya adalah shell Anda mengeluarkan sesuatu. Periksa
/etc/profile
,.profile
,.bashrc
,.cshrc
, dll Jika ya, Anda dapat mengubahnya untuk memeriksa apakah terminal Anda interaktif dan hanya menampilkan teks dengan menggunakan kode berikut di bashrc a. Sesuatu yang setara juga ada untuk shell lainnya:atau sebagai alternatif, seperti ini, karena parameter khusus
-
berisii
ketika shell bersifat interaktif:Namun, jika file tes sebenarnya 0 byte, maka shell Anda berperilaku, tetapi ada kemungkinan bahwa Anda hanya memiliki versi rsync yang sangat lama. Anda dapat memberi tahu ujung klien (dengan asumsi itu adalah ujung yang lebih baru) untuk tidak mengiklankan versi yang sedemikian tinggi sehingga versi server rysnc yang lama tidak mengenalinya. Anda dapat melakukan ini menggunakan
--protocol=
opsi. Dalam kasus saya, menggunakan--protocol=30
melakukan trik.Jika Anda masih mengalami masalah, coba ssh saat pengguna terhubung dengan rsysnc dan coba jalankan
rsync --version
untuk melihat apakah shell dapat menemukan rsync. Jika Anda mendapatkan sesuatu yang mengatakan perintah tidak ditemukan, maka rsync mungkin tidak diinstal pada mesin yang Anda sambungkan atau mungkin tidak ada di jalur. Rsync memang memiliki opsi untuk menentukan jalur ujung jarak jauh, baca halaman manual.sumber
--protocol
yang memecahkan masalah saya dengan server 2.5.6 (versi protokol 26) dan klien 3.1.0 (versi protokol 31)Ini adalah kasus khusus dari balasan lain, tetapi tidak jauh berbeda dari itu.
Untuk menjalankan rsync melalui ssh, Anda perlu akses shell di ssh untuk menjalankan perintah rsync jarak jauh. Jika akun ssh Anda hanya memungkinkan scp / sftp, Anda tidak akan dapat memulai menghapus rsync dan gagal memberikan kesalahan ini.
Ini dapat diuji dengan perintah yang sama seperti di atas
Yang ini harusnya gagal dan yang ini harusnya sukses
Ini membuktikan bahwa Anda hanya memiliki akses sftp.
Jika Anda ingin dan memiliki izin untuk melakukannya, Anda dapat menonaktifkan akses hanya sftp untuk pengguna itu, dengan mengedit
/etc/ssh/sshd_config
dan memeriksamatch
danforcecommand
entri.Anda juga dapat memeriksa pos ini
sumber
Aku
protocol version mismatch -- is your shell clean?
hanya karena aku tidak diinstal rsync di lain akhir belum.sudo yum install rsync
memecahkan masalah.sumber
Prompt tidak akan ditampilkan sama sekali ketika langsung menjalankan perintah, dan secara non-interaktif. Google sederhana menghasilkan hasil pertama: http://marc.info/?l=rsync&m=100263876212594&w=2 Dan karena shell dapat berpotensi dipanggil, ia tidak boleh menampilkan apa pun dalam mode non-interaktif - seperti, saat mengetik " bash "menjadi prompt yang ada, tidak ada yang muncul kecuali prompt baru.
sumber
Ini dapat disebabkan oleh pesan masuk pada host jarak jauh seperti "Kata sandi Anda akan kedaluwarsa dalam 6 hari" yang tidak diharapkan RSYNC
sumber