it-swarm.cn

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

我正在使用 [〜#〜] sshfs [〜#〜] 从笔记本电脑安装到中央服务器。

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

有没有办法让SSHFS挂载在长时间的断开连接(> 5分钟)或什至是使用不同IP的重新拨号后仍能生存?

60
bene

感谢autossh和autofs的提示。

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

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

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

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

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

ServerAliveCountMax=3仍然是默认值,但我希望将其指定为便于阅读。

65
kubanczyk

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

12
kband

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

这是一个 howto 我在Google上发现要完成此操作,还有其他几个地方。

9
Zoredache

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

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

Unmount /mnt/sshfs

/etc/hibernate/common.conf

2
David Z

kubanczyk的答案 很棒。我由于过于贪婪的sshfs而冻结了整个接口,现在出现了一个问题,为了轻松连接,该脚本启动了一个脚本,该脚本在笔记本电脑打开时会重新连接,而在连接速度变慢时不会冻结,您可以使用类似bash的脚本(也许不太安全,但是对于许多Web项目来说很方便):

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