我已设置 Nautilus 来使用 SFTP 挂载远程文件系统。
到目前为止,一切运行良好,但 SFTP 似乎存在一些我认为无用的问题:
- 当我覆盖现有文本文件时,远程计算机上的组读取权限被神秘地删除。
- 当我尝试通过将文件拖到 thunderbird 来将其附加到电子邮件时,我得到了一个 TB 无法使用的 sftp:// url(但是,如果我打开 TB 附加对话框并浏览
.gvfs
,一切都正常)。
当我通过 SSHFS 手动挂载同一文件系统时,这些都不会发生。是否可以配置 Nautilus 以使用 SSHFS?也许是一个插件?它没有出现在可用选项的“连接到服务器”列表中。
编辑:有人指出 sshfs 使用 sftp 协议作为后端。虽然这可能是真的,但真正的问题是通过 Nautilus 访问文件不如通过 sshfs 安装那么顺畅,我想弄清楚如何让 Nautilus 以良好的方式做到这一点。
答案1
到山主机的远程文件夹,以便您可以将远程文件视为客户端上的本地文件,sshfs
而不是sftp
。* 您将需要一个主机上的 OpenSSH 服务器之后以下内容才会起作用。
在本地客户端上挂载主机的远程文件夹
从客户端运行[1]:
test -e ~/mountpoint || mkdir --mode 700 ~/mountpoint
sshfs [email protected]:. ~/mountpoint -p <port-number>
开始使用 Nautilus
现在在 Nautilus 中打开本地文件夹~/mountpoint
。恭喜,您可以将远程文件视为客户端上的本地文件!
在本地客户端上卸载主机的远程文件夹
fusermount -u ~/mountpoint
*细节:SFTP 用于在客户端和主机之间传输文件,而 SSHFS 是一个文件系统客户端,可使远程文件表现为本地文件。就好像您暂时将主机的远程文件夹与虚拟本地文件夹同步一样。
当你与这些 SSHFS 文件交互时,你的本地客户端会通过 SSH 将副本从主机复制到客户端,以便一切顺利就像它们在你的客户端本地一样。但是,您所做的任何更改都会在远程主机上生效,并且在卸载后仍会保留。
答案2
另一种来回传输文件甚至远程使用文件的方法是使用 sshfs。它是基于 SFTP 的文件系统客户端,利用 sftp 子系统。它可以将远程服务器上的目录作为本地文件系统上的目录访问,任何程序都可以访问该目录,就像它是本地目录一样。用户必须具有挂载点的读写权限才能使用 sshfs。
所以最终,两者的通信方式相同。SSHFS 使用 SFTP。不同之处在于 sshfs 是一个文件系统驱动程序,允许安装允许通过 SFTP 访问的驱动器。然而,Nautilus 不会安装驱动器,它只显示它们。您可以将文件系统添加到 /etc/fstab 以在启动时安装它,但我不建议这样做,因为 ssh 连接可能不可用。更简单的方法是设置一个可以作为启动应用程序运行的 bash 脚本。
#2 中描述的行为只是合乎逻辑的:由于您仅通过 SFTP 连接,因此您拖入 thunderbird 的文件不存在于您的文件系统中,而是作为远程路径存在。
根据评论进行编辑:
也许我解释得不够好。这里有一个例子:如果你的远程资源在服务器 fooserver 上并且根目录是 foodir,文件在 foosubdir/foofile 中,那么资源路径是sftp://fooserver/foodir/foosubdir/foofile
。当你使用 Nautilus SFTP 时,这仍然是你访问此文件的唯一路径,它是远程的。如果你改用 sshfs,foodir 的内容将在你的文件系统中可用 - sshfs 是一个文件系统驱动程序。那么就好像文件存储在你的硬盘上一样。资源的内容在sftp://fooserver/foodir
逻辑上映射到你的挂载目录中~/.gvfs
。然后 thunderbird 可以从你的本地文件系统上下文中访问此文件~/.gvfs/foosubdir/foofile
。Thunderbird 甚至没有注意到它是一个远程文件,集成到 klinux 内核中的 sshfs 文件系统驱动程序会为你抽象这一点。