pengembangan-web-mp.com

SSHFS mount yang bertahan terputus

Saya menggunakan SSHFS mount dari laptop saya ke server pusat.

Jelas, pemasangan SSHFS rusak setelah pemutusan yang lebih lama (mis. Selama penundaan), menyebabkan koneksi SSH yang mendasari habis waktu.

Apakah ada cara untuk membuat tunggangan SSHFS selamat dari pemutusan yang tahan lama (> 5 menit) atau bahkan dial-ulang dengan IP yang berbeda?

60
bene

Terima kasih atas tips autossh dan autofs.

Namun, untuk tujuan langsung saya, saya menemukan solusi yang jauh lebih sederhana yang tidak didokumentasikan dengan baik:

sshfs -o reconnect server:/path/to/mount
54
bene

Gunakan -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

Kombinasi ServerAliveInterval=15,ServerAliveCountMax=3 menyebabkan kesalahan I/O muncul setelah satu menit pemadaman jaringan. Ini penting tetapi sebagian besar tidak berdokumen. Jika opsi ServerAliveInterval dibiarkan secara default (jadi tanpa tanda centang yang hidup), proses yang mengalami hang I/O sepertinya tidur tanpa batas, bahkan setelah sshfs mendapatkan reconnect 'ed. Saya menganggap ini perilaku yang tidak berguna.

Dengan kata lain apa yang terjadi pada -o reconnect tanpa menetapkan ServerAliveInterval adalah I/O apa pun akan berhasil, atau menggantung aplikasi tanpa batas waktu jika ssh terhubung kembali di bawahnya. Aplikasi tipikal menjadi sepenuhnya digantung sebagai hasilnya. Jika Anda ingin I/O mengembalikan kesalahan dan melanjutkan aplikasi, Anda perlu ServerAliveInterval=1 atau lebih besar.

ServerAliveCountMax=3 adalah defaultnya, tapi saya ingin menentukannya agar mudah dibaca.

65
kubanczyk

Autossh secara otomatis menyambung kembali sesi ssh ketika pemberitahuan ssh telah mati atau berhenti melewati lalu lintas. Karena ini hanya ssh otomatis, ini akan bekerja dari IP yang berbeda dan dari menangguhkan (bahkan jika laptop bangun pada lan yang berbeda).

12
kband

Satu hal yang dapat Anda lakukan adalah me-mount sistem file Anda melalui autofs . Autofs adalah alat yang akan memasang sistem file ketika Anda menggunakan sesuatu di direktori tempat sistem file akan di-mount. Ketika mendeteksi aktivitas, sistem file sudah di-mount. Ketika tidak ada yang terjadi pada sistem file, itu tidak di-mount.

Berikut adalah howto Saya temukan di google untuk menyelesaikan ini, ada beberapa orang lain.

9
Zoredache

Saya menduga tidak ada, karena bahkan jika Anda dapat mengkonfigurasi klien SSH Anda untuk tidak menjatuhkan koneksi, server mungkin dikonfigurasi untuk melakukannya setelah periode tidak aktif yang ditentukan, dan Anda tidak akan dapat menimpanya. Bahkan jika Anda bisa, jika Anda tidak pernah melanjutkan koneksi, server akan dibiarkan menggantung, dan seiring waktu itu dapat menyebabkan pemborosan sumber daya server yang signifikan.

Teknik yang lebih baik, saya pikir, adalah meng-unmount sistem file sebelum menangguhkan komputer Anda dan memasang kembali ketika komputer bangun lagi. Mekanisme untuk melakukannya tergantung pada bagaimana Anda menangguhkan komputer Anda - saya menggunakan kernel tuxonice dan untuk melakukan sesuatu seperti ini, saya memiliki arahan seperti

Unmount /mnt/sshfs

di /etc/hibernate/common.conf.

2
David Z

jawaban dari kubanczyk hebat. Saya punya masalah dengan pembekuan seluruh antarmuka karena sshfs terlalu serakah, sekarang untuk koneksi yang mudah dimulai oleh skrip yang menghubungkan kembali ketika laptop dibuka dan yang tidak membeku ketika koneksi semakin lambat, Anda dapat menggunakan skrip bash seperti itu (mungkin tidak terlalu aman, tetapi nyaman untuk banyak proyek web misalnya):

#!/bin/bash
echo PWD | sshfs [email protected]:/ MOUNT_PATH -o password_stdin,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 -p PORT -C -oStrictHostKeyChecking=no
if xhost >& /dev/null ; then
    pcmanfm MOUNT_PATH
fi
1