处理 sshfs 挂载的服务器断开连接的更好方法是什么?

Seb*_*ian 71 ssh mount sshfs

我有几个通过sshfs挂载的目录。我有时会与服务器断开连接(我无法配置)。我通常像这样挂载目录

sshfs user@server.example.com:/home/user /mnt/example
Run Code Online (Sandbox Code Playgroud)

当服务器断开连接时,sshfs 子系统不会卸载/释放目录,而是将其锁定为不可访问。键入时,安装仍然可见mount。当我打字

ls /mnt/example
Run Code Online (Sandbox Code Playgroud)

进程被锁定(Ctrl+c也无济于事)。我因此做

sudo umount -l /mnt/example
# find pid of corresponding process:
ps aux | grep example.com
kill -9 <pid of locked sshfs process>
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理这个问题?显然sshfs应该执行卸载和清理......理想情况下它会自动重新连接。

小智 53

您可以使用“重新连接”选项运行 sshfs。我们使用带有 PAM/automount 的 sshfs 为我们网络中的每个工作站共享服务器文件。我们使用 -o reconnect 作为 sshfs 的参数,主要是因为我们的用户暂停了他们的计算机并且唤醒时 sshfs 不会重新连接(或响应,或任何事情)。

例如:

sshfs mvaldez@192.168.128.1:/home/mvaldez/REMOTE /home/mvaldez/RemoteDocs -o reconnect,idmap=user,password_stdin,dev,suid
Run Code Online (Sandbox Code Playgroud)

请注意,如果远程计算机真的关闭了,sshfs 可能会长时间无响应。


Tho*_*hor 14

这可以通过减少超时来解决。将以下内容添加到$HOME/.ssh/config/etc/ssh/ssh_config

ServerAliveInterval 15
ServerAliveCountMax 3
Run Code Online (Sandbox Code Playgroud)

这会导致 45 秒超时。

  • 这只会在问题是 SSH 的错时有所帮助。有一个更大的问题是 `sshfs` 没有优雅地处理底层 `ssh` 进程的死亡。 (5认同)

luc*_*ian 8

我有一台服务器用于存储,由于我住的地方空间不足,我将它放在另一个位置。为了将文件带入我的网络,我使用了一个树莓派,它使用 sshfs 从服务器挂载文件。

最近由于电源故障我不得不升级到 raspbian jessie,并意识到 sshfs 变得严重不稳定。这些文件夹将被正确安装,但一段时间后我将无法连接到它们,如果我想列出安装的内容,树莓派会冻结。

我尝试的是:

  1. 在 fstab 中使用重新连接
  2. 在 .ssh/config 文件中使用了 ServerAliveInterval 和 ServerAliveCountMax 但无济于事。
  3. 我在大多数论坛上阅读的其他解决方案。

但没有骰子!直到我修改了 fstab 文件如下:

sshfs#user@server:/remote/folder /local/mount/dir fuse IdentityFile=sshkeyfile,Port=XXX,uid=1000,gid=1000,allow_other,_netdev,ServerAliveInterval=45,ServerAliveCountMax=2,reconnect,noatime,auto 0 0
Run Code Online (Sandbox Code Playgroud)

它有效!不再断开连接!我看起来 sshfs 由于某种原因没有读取 ssh 配置文件,并且从未发送过保持活动信号。