SSHFS mount yang bertahan terputus

57

Saya menggunakan tunggangan SSHFS dari laptop saya ke server pusat.

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

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

manfaat
sumber

Jawaban:

63

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

Kombinasi ini ServerAliveInterval=15,ServerAliveCountMax=3menyebabkan kesalahan I / O muncul setelah satu menit pemadaman jaringan. Ini penting tetapi sebagian besar tidak berdokumen. Jika ServerAliveIntervalopsi 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 reconnecttanpa menetapkan ServerAliveIntervaladalah 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=1atau lebih besar.

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

kubanczyk
sumber
Ini membuatnya untuk saya. Anda juga dapat menggunakan interval yang lebih pendek, afaik itu seharusnya tidak menyebabkan terlalu banyak masalah dan membuat semuanya lebih responsif.
Manux
Saya tidak membaca dokumen, tetapi saya melihat solusi lain mengatakan "ServerAliveCountMax = 0" berarti itu akan terus mencoba tanpa batas. Saya berasumsi solusi Anda memberikannya 3 retries setelah setiap kegagalan?
PJ Brunet
@ PJBrunet man 5 ssh_configuntuk 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.
Wyatt8740
@ Wyatt8740 Saya mempelajari ini lebih banyak dan membaca dokumentasi, saya percaya ServerAliveCountMax=3memiliki 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
PJ Brunet
1
Ini harus menjadi jawaban yang diterima.
Fl0v0
52

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
manfaat
sumber
Manis! Ini membuat saya benar-benar ingin memilah otentikasi-on-write: serverfault.com/q/379728/96905
Jeff Burdges
12

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).

kband
sumber
Mungkin Mosh bahkan lebih baik untuk sesi SSH interaktif.
Martin Ueding
@MartinUeding Saya mencari Mosh tetapi a) tidak berfungsi dengan sshfs b) tampaknya Anda harus menginstalnya di server juga, yang membuatnya kurang menarik, IMO.
PJ Brunet
9

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.

Sakit kepala
sumber
2

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

Unmount /mnt/sshfs

di /etc/hibernate/common.conf.

David Z
sumber
0

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):

#!/bin/bash
echo PWD | sshfs USER@SERVER:/ MOUNT_PATH -o password_stdin,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 -p PORT -C -oStrictHostKeyChecking=no
if xhost >& /dev/null ; then
    pcmanfm MOUNT_PATH
fi
Timofey Bugaevsky
sumber