Bağlantı kesilmesinden kurtulan SSHFS bağlantısı


56

Dizüstü bilgisayarımdan merkezi bir sunucuya SSHFS bağları kullanıyorum .

Açıkçası, SSHFS bağlantısı daha uzun bir bağlantı kesildikten sonra (örn. Askıya alma sırasında) koptu, altta yatan SSH bağlantısının zaman aşımına uğramasına neden oldu.

SSHFS bağlantılarını uzun süre dayanan bağlantı kesilmelerinde (> 5 dak.) Veya hatta farklı bir IP ile tekrar çevirmeden hayatta kalmanın bir yolu var mı?

Yanıtlar:


62

kullanım -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

Kombinasyon ServerAliveInterval=15,ServerAliveCountMax=3, G / Ç hatalarının bir dakikalık ağ kesintisinden sonra ortaya çıkmasına neden olur. Bu önemlidir ancak büyük ölçüde belgelenmemiş. Eğer ServerAliveIntervalseçenek varsayılan olarak bırakılmışsa (yani canlı kontrol olmadan), G / Ç askıda kalmasını deneyimleyen süreçler, sshfs düzeltildikten sonra bile süresiz uyuyor gibi görünmektedir reconnect. Bunu işe yaramaz bir davranış olarak görüyorum.

Başka bir deyişle ne olur -o reconnectatamadan ServerAliveIntervalherhangi G / Ç başarılı veya ssh altına bağlanır eğer süresiz uygulamayı askıda kalacaktır ya olmasıdır. Sonuç olarak tipik bir uygulama tamamen askıda kalır. G / Ç’nin bir hata döndürmesine ve uygulamayı devam ettirmesine izin vermek isterseniz, ihtiyacınız ServerAliveInterval=1veya daha fazlasını yapmanız gerekir .

ServerAliveCountMax=3Neyse varsayılan, ama okunabilmesi için bunu belirtmek istiyorum.


Bu benim için yaptı. Ayrıca daha kısa bir süre kullanabilirsiniz, çok fazla soruna neden olmamalı ve her şeyi daha duyarlı hale getirmemeli.
Manux

Belgeleri okumamıştım ama başka bir çözüm gördüm "ServerAliveCountMax = 0" belirsiz bir şekilde denemeye devam edeceği anlamına geliyor. Çözümünüzün her başarısızlıktan sonra 3 deneme verdiğini düşünüyorum.
PJ Brunet

@PJBrunet man 5 ssh_config, daha fazla ayrıntı için, ancak esas nokta, her 15 saniyede bir ssh'nin , bilgisayarların birbirlerine hala yanıt verdiğinden emin olmak için her 15 saniyede bir 'canlı tutma' pingi gibi bir şey göndereceğidir. Üç ardışık ping başarısız olursa (45 saniye), tekrar bağlayın.
Wyatt8740

@ Wyatt8740 Bunu daha fazla çalıştım ve belgeleri okudum, ServerAliveCountMax=3farklı bir anlamı olduğuna inanıyorum . Bir arıza olursa, 3 kez daha tekrar bağlanmayı deneyecek ve pes edecektir. Bir noktada yeniden denemek boşunadır, ancak bu uygulamaya bağlıdır. Sonra tekrar, man sayfasının daha spesifik olabileceğini düşünüyorum, IMO'nun nasıl ifade edildiğini yorumlamanın farklı yolları var. FWIW ProtonVPN'e geçtikten sonra sorunum ortadan kalktı. Sanırım, istemci ve sunucudaki ssh konfigürasyonunu kontrol etmeye değer, ayrı seçenekleri var, bu yüzden gerçekten ihtiyacınız olan tek şey-o reconnect
PJ Brunet

1
Bu kabul edilen cevap olmalı.
Fl0v0

52

Autossh ve autofs ipuçları için teşekkürler.

Ancak, doğrudan amacım için bu kadar iyi belgelenmemiş çok daha basit bir çözüm buldum:

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

Tatlı! Bu beni gerçekten kimlik doğrulaması yazarken çözmek istiyor: serverfault.com/q/379728/96905
Jeff Burdges 17:12

12

Autossh, ssh'nin öldüğünü veya trafik geçişini durdurduğunu fark ettiğinde otomatik olarak ssh oturumlarını yeniden bağlar. Sadece otomatik ssh olduğundan, farklı IP'lerden ve askıya alınmadan çalışacaktır (dizüstü bilgisayar farklı bir ağ üzerinde uyanıyor olsa bile).


Belki de Mosh etkileşimli bir SSH oturumu için daha da iyidir.
Martin Uing,

@MartinUeding Mosh'a baktım ama a) sshfs ile çalışmıyor b) sunucuya da yüklemeniz gerekiyor, bu da IMO'yu daha az cazip hale getiriyor.
PJ Brunet

9

Yapabileceğiniz bir şey, dosya sistemlerinizi autofs aracılığıyla monte etmektir . Autofs, dosya sisteminin bağlanacağı dizinde bir şey kullandığınızda bir dosya sistemini bağlayacak bir araçtır. Aktivite tespit ettiğinde dosya sistemi monte edilir. Dosya sisteminde hiçbir şey olmadığında, bağlantısı kaldırıldı.

İşte olan howto orada, nerede birkaç diğerleri Bunu gerçekleştirmek için ben google bulundu.


2

Yapılmadığından şüpheliyim, çünkü SSH istemcinizi bağlantıyı kesmeyecek şekilde yapılandırabilseniz bile, sunucu belirli bir süre kullanılmadığında bunu yapacak şekilde yapılandırılmış olabilir ve bunu geçersiz kılamazsınız. Yapabilseniz bile, bağlantıyı hiçbir zaman sürdürmezseniz, sunucu askıda kalır ve zamanla sunucu kaynaklarının kaybedilmesine neden olabilir.

Bence, daha iyi bir teknik, bilgisayarınızı askıya almadan önce dosya sisteminin bağlantısını kesmek ve bilgisayar tekrar uyandığında yeniden monte etmektir. Bunu yapma mekanizması bilgisayarınızı tamamen nasıl askıya aldığınıza bağlı olabilir - smokin çekirdeğini kullanıyorum ve böyle bir şey yapmak için bir yönergem var

Unmount /mnt/sshfs

içinde /etc/hibernate/common.conf.


0

Kubanczyk cevabı büyüktür. Çok açgözlü sshfs nedeniyle tüm arayüzün donmasıyla ilgili bir sorun yaşadım, şimdi dizüstü bilgisayar açıldığında yeniden bağlanan ve bağlantı yavaşladığında donmayan bir komut dosyasıyla kolay bağlantı için başlattığım için (örneğin, belki de bir bash komut dosyası kullanabilirsiniz) çok güvenli değil, ancak birçok web projesi için uygun):

#!/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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.