Menggunakan -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3
Kombinasi ini ServerAliveInterval=15,ServerAliveCountMax=3
menyebabkan kesalahan I / O muncul setelah satu menit pemadaman jaringan. Ini penting tetapi sebagian besar tidak berdokumen. Jika ServerAliveInterval
opsi dibiarkan secara default (jadi tanpa centang hidup), proses yang mengalami I / O hang tampaknya tidur tanpa batas, bahkan setelah sshfs selesai reconnect
. Saya menganggap ini perilaku yang tidak berguna.
Dengan kata lain apa yang terjadi -o reconnect
tanpa menetapkan ServerAliveInterval
adalah I / O akan berhasil, atau menggantung aplikasi tanpa batas 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.
Ini ServerAliveCountMax=3
adalah defaultnya, tapi saya ingin menentukannya agar mudah dibaca.
man 5 ssh_config
untuk detail lebih lanjut, tetapi intinya adalah bahwa setiap 15 detik ssh akan mengirim sesuatu seperti ping 'tetap hidup' setiap 15 detik untuk memastikan komputer masih saling merespons. Jika tiga ping berturut-turut gagal (45 detik), sambungkan kembali.ServerAliveCountMax=3
memiliki arti yang berbeda. Jika ada kegagalan, ia akan mencoba menghubungkan kembali 3 kali dan kemudian menyerah. Pada titik tertentu coba lagi itu sia-sia, tetapi itu tergantung pada aplikasi. Kemudian lagi, saya pikir halaman manual bisa lebih spesifik, ada cara berbeda untuk menafsirkan cara itu kata IMO. FWIW masalah spesifik saya hilang setelah beralih ke ProtonVPN. Saya pikir itu juga layak memeriksa konfigurasi ssh pada klien dan server, mereka memiliki opsi terpisah, sehingga semua yang Anda butuhkan adalah-o reconnect
Terima kasih atas tips autossh dan autofs.
Namun, untuk tujuan langsung saya, saya menemukan solusi yang jauh lebih sederhana yang tidak didokumentasikan dengan baik:
sumber
Autossh secara otomatis menghubungkan 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).
sumber
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 yang saya temukan di google untuk mencapai hal ini, di mana ada beberapa lainnya.
sumber
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 yang 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
di
/etc/hibernate/common.conf
.sumber
The jawaban kubanczyk besar. Saya punya masalah dengan membekukan seluruh antarmuka karena sshfs terlalu serakah, sekarang untuk koneksi yang mudah dimulai oleh skrip yang menghubungkan kembali ketika laptop dibuka dan yang tidak membeku saat koneksi menjadi lebih lambat, Anda dapat menggunakan skrip bash seperti itu (mungkin tidak terlalu aman, tetapi nyaman untuk banyak proyek web misalnya):
sumber