切断後も生き残るSSHFSマウント


56

ラップトップから中央サーバーにSSHFSマウントを使用しています。

明らかに、より長い切断の後(例えば、サスペンド中)にSSHFSマウントが壊れ、基礎となるSSH接続がタイムアウトします。

SSHFSマウントを長続きする切断(5分以上)に耐えられるようにする方法や、別のIPを使用した再ダイアルを取得する方法はありますか?

回答:


62

つかいます -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とにかくデフォルトですが、私は読みやすさのためにそれを指定することが好きです。


これは私のためにそれを作りました。また、より短い間隔を使用することもできますが、あまり問題を起こさず、全体の応答性を高める必要があります。
マヌー

私はドキュメントを読みませんでしたが、「ServerAliveCountMax = 0」という別のソリューションが無限に試行を続けることを意味するのを見ました。あなたのソリューションは、各失敗後に3回再試行すると思いますか?
PJ黒髪

man 5 ssh_config詳細については@PJBrunet ですが、要点は、15秒ごとにsshが15秒ごとに「キープアライブ」pingのようなものを送信して、コンピューターが相互に応答していることを確認することです。3回連続してpingが失敗した場合(45秒)、再接続します。
Wyatt8740

@ Wyatt8740私はこれをもっと勉強し、ドキュメントを読みましたServerAliveCountMax=3。別の意味があると思います。障害が発生した場合は、さらに3回再接続を試みてから放棄します。ある時点で再試行は無駄になりますが、それはアプリケーションによって異なります。繰り返しになりますが、マニュアルページはより具体的であり、IMOと呼ばれる方法を解釈するさまざまな方法があると思います。FWIW ProtonVPNに切り替えた後、私の特定の問題はなくなりました。クライアントとサーバーのssh構成も確認する価値があると思います。それらには個別のオプションがあるため、本当に必要なのは-o reconnect
PJブルーネット

1
これは受け入れられた答えであるはずです。
Fl0v0

52

autosshとautofsのヒントをありがとう。

しかし、私の直接的な目的のために、あまりよく文書化されていないはるかに単純なソリューションを見つけました:

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

甘い!これは私が実際に認証・オン・ライトを整理したくなる:serverfault.com/q/379728/96905
ジェフBurdges

12

Autosshは、 sshが停止したか、トラフィックの通過を停止したことに気付いたときに、sshセッションを自動的に再接続します。それは単なる自動化されたsshであるため、異なるIPおよびサスペンドから動作します(ラップトップが異なるLANで起動した場合でも)。


おそらく、Moshは対話型のSSHセッションに適しています。
マーティンUeding

@MartinUeding Moshを検索しましたが、a)sshfsで動作しませんb)サーバーにもインストールする必要があるようです。
PJブルーネット

9

できることの1つは、autofsを使用してファイルシステムをマウントすることです。autofsは、ファイルシステムがマウントされるディレクトリで何かを使用するときにファイルシステムをマウントするツールです。アクティビティを検出すると、ファイルシステムがマウントされます。ファイルシステムで何も起きていないときは、アンマウントされます。

これは、Googleでこれを実現するために見つけたハウツーです。


2

接続が切断されないようにSSHクライアントを構成できる場合でも、指定された非アクティブ期間が経過するとサーバーがそのように構成されている可能性があり、それをオーバーライドすることはできないためです。たとえできたとしても、接続を再開しないと、サーバーがハングしたままになり、時間がたつとサーバーリソースが大幅に浪費されることになります。

より良い方法は、コンピューターを一時停止する前にファイルシステムをアンマウントし、コンピューターが再び起動したときに再マウントすることだと思います。そうするためのメカニズムは、コンピュータをどのようにサスペンドするかによって異なります-私はtuxoniceカーネルを使用し、このようなことをするために次のようなディレクティブを持っています

Unmount /mnt/sshfs

/etc/hibernate/common.conf


0

クバンチク答えは素晴らしいです。貪欲な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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.