SSHFS安装可在断开连接后幸存


56

我正在使用从笔记本电脑到中央服务器的SSHFS挂载。

显然,较长时间的断开连接(例如,在挂起期间)后,SSHFS安装会中断,从而导致基础SSH连接超时。

有没有办法让SSHFS挂载在长时间断开连接(> 5分钟)后甚至通过不同IP重新拨号?

Answers:


62

采用 -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

组合ServerAliveInterval=15,ServerAliveCountMax=3导致网络中断一分钟后弹出I / O错误。这很重要,但基本上没有记录。如果将ServerAliveInterval选项保留为默认值(因此不进行实时检查),则即使sshfs被reconnect“ ed” 后,经历I / O挂起的进程似乎仍会无限期休眠。我认为这是无用的行为。

换句话说,-o reconnect如果没有重新分配ServerAliveInterval,则ssh重新连接时,任何I / O都会成功,或者无限期地挂起应用程序,这将发生。结果,典型的应用程序变得完全挂起。如果您希望允许I / O返回错误并恢复应用程序,则需要ServerAliveInterval=1或更高。

ServerAliveCountMax=3是默认的,无论如何,但我喜欢将其指定为可读性。


这对我来说就做到了。另外,您可以使用更短的间隔,否则它不会造成太大的麻烦,并且使整个过程更灵敏。
Manux

我没有阅读文档,但是我看到另一个解决方案说“ ServerAliveCountMax = 0”意味着它将无限期地尝试。我认为您的解决方案在每次失败后都会进行3次重试?
PJ布鲁内特

@PJBrunet man 5 ssh_config了解更多详细信息,但要点是,每15秒ssh会每15秒发送一次类似“ keep-alive”的ping命令,以确保计算机仍在相互响应。如果连续三个ping操作失败(45秒),请重新连接。
Wyatt8740

@ Wyatt8740我研究了更多内容并阅读了文档,我相信ServerAliveCountMax=3它具有不同的含义。如果出现故障,它将尝试重新连接3次以上,然后放弃。在某些时候,重试是徒劳的,但这取决于应用程序。再说一次,我认为手册页可能更具体,有不同的方式来解释它的IMO措辞。FWIW我的特定问题在切换到ProtonVPN后消失了。我认为也有必要检查客户端和服务器上的ssh配置,它们具有单独的选项,因此您真正需要的就是-o reconnect
PJ Brunet

1
这应该是公认的答案。
Fl0v0

52

感谢autossh和autofs的提示。

但是,出于我的直接目的,我发现了一个简单得多的解决方案,但记录得不够好:

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

甜!这让我真的很想整理一下authenticate-on-write:serverfault.com/q/379728/96905
Jeff Burdges 2012年

12

当发现ssh死亡或停止传递流量时,Autossh会自动重新连接ssh会话。由于它只是自动ssh,因此它将在不同的IP和挂起状态下工作(即使笔记本电脑在不同的局域网中唤醒)。


也许Mosh对于交互式SSH会话甚至更好。
Martin Ueding '18

@MartinUeding我抬起头来查看Mosh,但a)不适用于sshfs b)看来您也需要在服务器上安装它,这使IMO的吸引力降低了。
PJ布鲁内特'18

9

您可以做的一件事是通过autofs挂载文件系统。Autofs是一种工具,当您在要挂载文件系统的目录中使用某些东西时,它将挂载文件系统。当它检测到活动时,将挂载文件系统。如果文件系统上没有任何事件,则将其卸载。

这是一个HOWTO我在谷歌发现做到这一点,有几个人在那里。


2

我怀疑没有,因为即使您可以配置SSH客户端不断开连接,服务器也可能被配置为在指定的不活动时间后断开连接,并且您将无法覆盖该连接。即使您可以,即使您从未恢复连接,服务器也将被挂起,随着时间的流逝,可能会导致服务器资源的大量浪费。

我认为,更好的技术是在挂起计算机之前先卸载文件系统,然后在计算机再次唤醒时重新挂载它。这样做的机制可能完全取决于您如何挂起计算机-我使用tuxonice内核并执行类似的操作,我有一条类似的指令

Unmount /mnt/sshfs

/etc/hibernate/common.conf


0

kubanczyk答案很好。我由于过于贪婪的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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.