Rsync over ssh, berfungsi dengan baik setiap saat.
Namun, mencoba rsync ke host yang memungkinkan hanya login sftp, tetapi bukan login ssh, memberikan kesalahan berikut:
rsync -av / source ssh user @ remotehost: / target /
versi protokol tidak cocok - apakah shell Anda bersih? (lihat halaman manual rsync untuk penjelasan) kesalahan rsync: ketidakcocokan protokol (kode 2) di compat.c (171) [pengirim = 3.0.6]
Inilah bagian yang relevan dari halaman manual rsync:
Pesan ini biasanya disebabkan oleh skrip startup atau fasilitas shell jarak jauh yang menghasilkan sampah yang tidak diinginkan pada stream yang digunakan rsync untuk pengangkutannya. Cara mendiagnosis masalah ini adalah dengan menjalankan remote shell Anda seperti ini:
ssh remotehost /bin/true > out.dat
lalu lihat out.dat. Jika semuanya bekerja dengan benar maka out.dat harus berupa file dengan panjang nol. Jika Anda mendapatkan kesalahan di atas dari rsync maka Anda mungkin akan menemukan bahwa out.dat berisi beberapa teks atau data. Lihat isinya dan coba cari tahu apa yang memproduksinya. Penyebab paling umum adalah skrip startup shell yang tidak dikonfigurasi dengan benar (seperti .cshrc atau .profile) yang berisi pernyataan keluaran untuk login non-interaktif.
Mencoba ini di sistem saya menghasilkan yang berikut di out.dat:
ssh-dummy-shell: Perintah tidak diizinkan.
Seperti yang saya pikir, tuan rumah tidak mengizinkan login ssh.
Tautan berikut menunjukkan bahwa mungkin untuk menyelesaikan tugas ini menggunakan sekering dengan sshfs - namun sangat lambat, dan tidak cocok untuk penggunaan produksi.
Apakah ada peluang mendapatkan rsync sftp untuk bekerja?
csync /home/csync sftp://[email protected]:2222/home/csync
Lihat jawaban ini .lftp -e "mirror -eRv /local/dir/ /remote/dir; quit;" sftp://user@server:port
Jawaban:
Sayangnya tidak secara langsung.
rsync
membutuhkan tautan bersih dengan shell yang akan memungkinkannya memulai salinan jarak jauhrsync
, saat dijalankan dengan cara ini.Jika Anda memiliki beberapa cara untuk menjalankan proses mendengarkan jangka panjang pada host, Anda dapat mencoba memulai rsync secara manual mendengarkan koneksi pada port non-privilege, tetapi sebagian besar teknik untuk melakukan itu akan memerlukan akses shell yang tepat melalui SSH juga, dan itu bergantung pada firewall host mengatur koneksi di port yang Anda pilih (dan host yang menginstal rsync sejak awal). Menjalankan rsync sebagai layanan yang dapat dialamatkan secara publik (daripada secara tidak langsung melalui SSH atau serupa) umumnya tidak direkomendasikan untuk data non-publik.
Jika host Anda mengizinkan scripting dalam PHP atau yang serupa dan tidak membuatnya terkunci sehingga proses tambahan tidak dapat
exec
diedit oleh skrip pengguna, maka Anda dapat mencoba memulai rsync dalam mode mendengarkan dengan cara itu. Jika ujung Anda dapat dihubungkan (Anda menjalankan SSH yang dapat diakses oleh dunia luar) Anda dapat mencoba ini secara terbalik - minta skrip menjalankan rsync di server tetapi alih-alih mendengarkan koneksi yang masuk, mintalah hubungi layanan lokal Anda dan sinkronkan dengan cara itu. Ini masih bergantung pada rsync yang sebenarnya sedang diinstal pada host yang tidak diberikan, atau bahwa Anda dapat mengunggah copy pekerjaan, tetapi tidak memiliki implikasi keamanan menjalankan daemon rsync dengan cara yang dapat dialamatkan secara publik dan berbicara dengan rsync secara terbuka dan berbicara dengan rsync secara tidak terenkripsi. saluran.Berputar-putar seperti dijelaskan di atas mungkin bertentangan dengan kebijakan tuan rumah, meskipun itu berfungsi sama sekali, dan bisa membuat Anda dikeluarkan. Anda lebih baik bertanya apakah shell lengkap dapat diaktifkan untuk akun itu dan meninggalkan rsync untuk host itu atau meninggalkan host itu dan pindah ke tempat lain jika mereka tidak mau melakukannya.
sumber
Secara teoritis, ya. Anda dapat memasang sistem file jarak jauh pada mesin lokal Anda menggunakan FUSE . Kemudian Anda dapat menjalankan salinan rsync lokal antara direktori yang di-mount dan direktori lokal. Saya belum mencoba ini secara pribadi, tetapi harus bekerja secara teori. Kemungkinan akan jauh lebih efisien daripada melakukan rsync di atas SSH karena itu perlu mentransfer setidaknya sebagian dari setiap file untuk melakukan perbandingan.
sumber
Alternatif untuk menggunakan rsync adalah menggunakan lftp (yang dapat terhubung ke sftp) dan menggunakan perintah mirror. Misalnya seseorang dapat melakukannya
sumber
sedikit terlambat, tapi di sini adalah bagaimana saya melakukannya, menggunakan sshfs
sumber
Rsync bekerja dengan menjalankan rsync di sisi lain dan berkomunikasi dengannya, yang berarti bahwa beberapa bentuk akses shell diperlukan.
sumber
Alternatifnya adalah memulai rsync sebagai daemon dan terhubung dengannya melalui terowongan SSH.
sumber
authorized_keys
yang memungkinkan terowongan tertentu dan berjalan misalnyasleep 86400
. Kemudian sisi klien kemudian bisarsync
melalui terowongan.Opsi menggabungkan yang terbaik dari semuanya
Tampaknya memiliki kelebihan berikut yang tidak dimiliki jawaban lain di sini:
rsync
daemonSaya belum mengujinya, tetapi saya telah berhasil menggunakan semua fitur itu kecuali
rrsync
.Bagaimana cara melakukannya
ssh-keygen
(fitur openSSH)~/.ssh/authorized_keys
(fitur openSSH)~/.ssh/authorized_keys
(fitur openSSH) menggunakan perintah skrip yangrrsync
didistribusikan dengan rsync, sesuatu seperticommand="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-
Maka Anda dapat rsync dari klien secara normal.
Jika Anda membutuhkan detail lebih lanjut
Membatasi Akses SSH ke rsync | Guy Rutenberg
Satu langkah di luar tautan di atas
Perintah di akhir halaman itu bisa dibuat lebih pendek. Dalam
~/.ssh/config
membuat bait seperti ini:Host remote # can be host or ip or custom-label User user # login on remote host HostName optional-dns-resolvable-host-or-ip # if label used above IdentityFile ~/.ssh/id_remote_backup
maka perintah rsync Anda dari klien
menjadi
sumber
rsync
agar dapat dijalankan, menghindari aspek SFTP. Jika Anda disajikan dengan server SFTP orang lain yang Anda tidak memiliki kendali atas maka jawaban ini tidak dapat menyelesaikan masalah.