回答:
つかいます -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3
この組み合わせServerAliveInterval=15,ServerAliveCountMax=3
により、1分間のネットワーク停止後にI / Oエラーが発生します。これは重要ですが、ほとんど文書化されていません。場合はServerAliveInterval
オプションが(そう生きチェックなし)デフォルトのままにされ、プロセスの経験I / Oハングはsshfsのを取得した後も、無期限に寝ているように見えるreconnect
「エド。これは役に立たない行動だと思います。
言い換えると、-o reconnect
割り当てをせずに何が起こるかServerAliveInterval
は、I / Oが成功するか、sshがその下で再接続した場合にアプリケーションを無期限にハングさせることです。その結果、典型的なアプリケーションは完全にハングアップします。I / Oがエラーを返してアプリケーションを再開できるようにする場合はServerAliveInterval=1
、それ以上が必要です。
ServerAliveCountMax=3
とにかくデフォルトですが、私は読みやすさのためにそれを指定することが好きです。
man 5 ssh_config
詳細については@PJBrunet ですが、要点は、15秒ごとにsshが15秒ごとに「キープアライブ」pingのようなものを送信して、コンピューターが相互に応答していることを確認することです。3回連続してpingが失敗した場合(45秒)、再接続します。
ServerAliveCountMax=3
。別の意味があると思います。障害が発生した場合は、さらに3回再接続を試みてから放棄します。ある時点で再試行は無駄になりますが、それはアプリケーションによって異なります。繰り返しになりますが、マニュアルページはより具体的であり、IMOと呼ばれる方法を解釈するさまざまな方法があると思います。FWIW ProtonVPNに切り替えた後、私の特定の問題はなくなりました。クライアントとサーバーのssh構成も確認する価値があると思います。それらには個別のオプションがあるため、本当に必要なのは-o reconnect
autosshとautofsのヒントをありがとう。
しかし、私の直接的な目的のために、あまりよく文書化されていないはるかに単純なソリューションを見つけました:
sshfs -o reconnect server:/path/to/mount
接続が切断されないようにSSHクライアントを構成できる場合でも、指定された非アクティブ期間が経過するとサーバーがそのように構成されている可能性があり、それをオーバーライドすることはできないためです。たとえできたとしても、接続を再開しないと、サーバーがハングしたままになり、時間がたつとサーバーリソースが大幅に浪費されることになります。
より良い方法は、コンピューターを一時停止する前にファイルシステムをアンマウントし、コンピューターが再び起動したときに再マウントすることだと思います。そうするためのメカニズムは、コンピュータをどのようにサスペンドするかによって異なります-私はtuxoniceカーネルを使用し、このようなことをするために次のようなディレクティブを持っています
Unmount /mnt/sshfs
で/etc/hibernate/common.conf
。
クバンチクの答えは素晴らしいです。貪欲なsshfsが原因でインターフェイス全体がフリーズする問題がありました。ラップトップを開いたときに再接続し、接続が遅くなってもフリーズしないスクリプトで簡単に接続できるように、そのようなbashスクリプトを使用できます(多分非常に安全ではありませんが、たとえば多くのWebプロジェクトに便利です):
#!/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