如何像 sshfs 一样将本地目录挂载到远程?

如何像 sshfs 一样将本地目录挂载到远程?

我知道 sshfs 用于将远程目录挂载到本地,但我需要将本地目录挂载到远程 fs。

我想挂载一个本地文件夹,例如:

/home/username/project_directory

到我有 ssh 访问权限的远程机器上,例如:

/var/www/project_directory

目标是将本地所做的编辑反映在远程文件系统上。

答案1

怎么做呢?你可以通过登录到本地机器的端口 22 来设置 ssh 转发,然后使用 sshfs 在另一端挂载。

例如,将本地计算机上的 /home/username/mywwwdevelstuff 挂载到服务器端的 /var/www:

localusername@localmachine: ssh username@server -R 10000:localmachine:22
username@server: cd /var
username@server: sshfs -p 10000 -o idmap=user,nonempty \
                 [email protected]:~/mywwwdevelstuff www

答案2

为了避免额外的身份验证和双重加密,您可以将端口反向转发到 22 以外的其他端口,并首先在本地通过 ncat 的 -e 选项在该端口上运行 /usr/libexec/openssh/sftp-server。然后在远程端通过 ssh 命令使用 sshfs 的“directport”选项。

ncat -l -p 34567 -e /usr/libexec/openssh/sftp-server &
ssh -t -R 34568:localhost:34567 $REMOTE "sshfs localhost: $MPOINT -o directport=34568; bash"

您将获得一个远程 shell,其中包含 $MPOINT 目录中的本地文件,并且您无需登录两次。多么方便啊。作为额外奖励,它只允许安装一次,因此如果远程计算机上的其他人尝试打开端口 34568,她将无法访问您的文件。确保端口号 34567 未在本地使用,34568 未在远程使用,否则请选择其他大于 1024 的数字。并确保 $MPOINT 目录存在于远程端。

答案3

不。

为了做到这一点,您需要做的“全部”就是反转您的逻辑。例如,您可以设置一个 1 行程序,它将 ssh 连接到远程计算机,然后使用 sshfs 将远程目录挂载到该框上的本地计算机上。当然,这可能过于简单,因为有 NAT、防火墙规则等,但您没有描述您的使用案例。

还有其他协议,如 SMB 和更好的 NFS - 但它们也会遭遇类似的问题。

你所遇到的问题的核心是机器需要信任数据源,如果你可以远程安装文件系统,这将会破坏互联网安全的核心原则之一。

答案4

我很喜欢@Ronald Hoogenboom的解决方案,但我对其进行了调整,使其与 ssh_config (~/.ssh/config) 文件配合使用,这样当我正常运行“ssh $HOSTNAME”时,它可以透明地设置所有内容:

Host $HOSTNAME
    RequestTTY yes
    ProxyCommand ncat -l -p 34567 -e /usr/lib/sftp-server & nc %h %p
    RemoteForward 34568 localhost:34567
    RemoteCommand sshfs localhost:$MY_DIR $MPOINT -o directport=34568; /bin/bash -li; fusermount -u $MPOINT

(根据需要替换 $HOSTNAME、$MY_DIR 和 $MPOINT)

相关内容