Answers:
采用 -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
是默认的,无论如何,但我喜欢将其指定为可读性。
man 5 ssh_config
了解更多详细信息,但要点是,每15秒ssh会每15秒发送一次类似“ keep-alive”的ping命令,以确保计算机仍在相互响应。如果连续三个ping操作失败(45秒),请重新连接。
ServerAliveCountMax=3
它具有不同的含义。如果出现故障,它将尝试重新连接3次以上,然后放弃。在某些时候,重试是徒劳的,但这取决于应用程序。再说一次,我认为手册页可能更具体,有不同的方式来解释它的IMO措辞。FWIW我的特定问题在切换到ProtonVPN后消失了。我认为也有必要检查客户端和服务器上的ssh配置,它们具有单独的选项,因此您真正需要的就是-o reconnect
感谢autossh和autofs的提示。
但是,出于我的直接目的,我发现了一个简单得多的解决方案,但记录得不够好:
sshfs -o reconnect server:/path/to/mount
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