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

显然,长时间断开连接(例如,在挂起期间)后,SSHFS挂载被破坏,导致基础SSH连接超时。

是否可以通过长时间断开连接(> 5分钟)甚至使用其他IP重新拨号来使SSHFS安装挂载?

#1 楼

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

组合ServerAliveInterval=15,ServerAliveCountMax=3会导致网络中断一分钟后弹出I / O错误。这很重要,但基本上没有记录。如果将ServerAliveInterval选项保留为默认值(因此不进行实时检查),即使sshfs获得了reconnect的支持,经历I / O挂起的进程也似乎会无限期地进入睡眠状态。我认为这是没有用的行为。换句话说,如果不分配-o reconnect,在ServerAliveInterval上发生的事情是,如果ssh在下面重新连接,则任何I / O都会成功,或者无限期地挂起应用程序。结果,典型的应用程序变得完全挂起。如果希望允许I / O返回错误并恢复应用程序,则需要ServerAliveInterval=1或更高版本。 br />

评论


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

–手册
16年1月12日在16:12

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

– PJ Brunet
18年5月28日在6:18



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

–Wyatt8740
18年6月17日在19:22

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

– PJ Brunet
18年6月18日在17:23

我希望I / O可以重试,并且永远不会返回任何错误,就像什么都没有发生一样继续进行。完全发生I / O错误的事实使我非常悲痛,因为我的视频录制毫不客气地终止了,从而使最终的视频文件无法播放!

–迈克尔
20年4月16日在4:59

#2 楼

感谢您提供autossh和autofs的技巧。

评论


甜!这使我真的很想整理写入时的身份验证:serverfault.com/q/379728/96905

–杰夫·伯吉斯(Jeff Burdges)
2012年6月17日12:39



#3 楼

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

评论


对于交互式SSH会话,Mosh也许更好。

–马丁·乌丁
18年4月14日在14:28

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

– PJ Brunet
18年5月28日在6:14

#4 楼

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

这是我在Google上找到的如何完成此操作的方法,还有其他几个方法。

评论


这些链接似乎已经死了,我找不到专用的页面,这仅仅是Linux的软件包吗?

–Herman牙刷
20-05-23在9:21

#5 楼

我怀疑没有,因为即使您可以配置SSH客户端不断开连接,服务器也可能被配置为在指定的不活动时间后断开连接,并且您将无法覆盖该连接。即使可以,即使您永远无法恢复连接,服务器也将被挂起,随着时间的流逝,可能会导致服务器资源的大量浪费。在挂起计算机之前先卸载文件系统,然后在计算机再次唤醒时重新挂载它。这样做的机制可能完全取决于您如何挂起计算机-我使用tuxonice内核并执行类似的操作,我在/etc/hibernate/common.conf中有一​​个类似

Unmount /mnt/sshfs


的指令。

#6 楼

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


评论


我怀疑使用password_stdin和-oStrictHostKeyChecking = no是一个坏主意。这会将密码泄漏给任何设法为您提供虚假DNS的人/将IP地址重新路由到其计算机的人,即您连接到的任何免费wi-fi都可以获取密码。

– SuzanneDupéron
20-11-13在19:42