如何通过 ssh 隧道提供 NFS 访问?

如何通过 ssh 隧道提供 NFS 访问?

我家里的局域网上有两个 Raspberries Pi -rasrhorasnurasrho我的路由器将一个 ssh 端口转发给它,这样我就可以从局域网外部 ssh 到它。 rasnu正在运行 NFS 服务器。我的最终目标是允许外部用户(具有 ssh 访问权限rasrho)能够挂载托管在 上的 NFS 服务器rasnu- 但到目前为止,我甚至无法通过 ssh 隧道连接内部

NFS 服务器rasnu已配置,以便我的 LAN 上的其他机器可以成功连接:

pi@rasrho:~ $ ls /mnt/NFSDirectory
[null]
pi@rasrho:~ $ sudo mount -t nfs rasnu.local:/media /mnt/NFSDirectory
pi@rasrho:~ $ ls /mnt/NFSDirectory
[listing of the directories from the NFS Server]

但是,当我设置从rasrho到 的ssh 隧道时rasnu,挂载失败(端口引用来自这里):

pi@rasrho:~ $ ssh -fN -L 2049:localhost:2049 [email protected]
pi@rasrho:~ $ ssh -fN -L 32323:localhost:32323 [email protected]
pi@rasrho:~ $ ls /mnt/NFSDirectory
[null]
pi@rasrho:~ $ sudo mount -vvv -t nfs4 localhost:/media /mnt/NFSDirectory
mount.nfs: timeout set for Thu Apr  9 06:36:19 2020
mount.nfs: trying text-based options 'vers=4.2,addr=::1,clientaddr=::1'
mount.nfs: mount(2): Invalid argument
mount.nfs: trying text-based options 'vers=4.1,addr=::1,clientaddr=::1'
mount.nfs: mount(2): Permission denied
mount.nfs: trying text-based options 'vers=4.1,addr=127.0.0.1,clientaddr=127.0.0.1'
mount.nfs: mount(2): Permission denied
mount.nfs: access denied by server while mounting localhost:/media

尽管服务器/etc/exports允许从以下位置安装127.0.0.1

pi@rasnu:~ $ cat /etc/exports
/media 192.168.42.0/255.255.255.0(ro,no_subtree_check,insecure)
/media 127.0.0.1(ro,no_subtree_check,insecure,no_root_squash)

这个配置有什么问题?并且,在我的计划中,我是否可能遇到其他隐藏的“陷阱”,允许单独网络上的主机通过执行ssh -fN -L *:2049:rasnu.local:2049 <external_address_of_rasrho>(和类似的32323)来挂载此 NFS 服务器“就像它是本地的”?

(特别是,尽管按照以下说明执行,但我无法生成/var/log/messages与这些权限失败相关的任何日志rpcdebug -m nfsd -s all这里


编辑:阅读后本文,我尝试将我rasnu的改为/etc/exports

/mnt/drive *(ro,sync,insecure,hide,no_root_squash,fsid=0,no_subtree_check)
/mnt/drive/media *(ro,sync,insecure,hide,no_root_squash,fsid=1,no_subtree_check)

(并继续跑sudo exportfs -rrasnu,然后:

pi@rasrho:~ $ ls /mnt/NFSDirectory
[null]
pi@rasrho:~ $ ssh -fN -R :3049:rasnu.local:2049 rasrho.local
pi@rasrho:~ $ sudo mount -t nfs -o port=3049 localhost:/media /mnt/NFSDirectory
pi@rasrho:~ $ ls /mnt/NFSDirectory
[...results...]

但是,我无法从我的 Mac 上执行等效操作(仍然与这两个 Raspberries Pi 在同一个 LAN 上 - 使用-L而不是-R因为我正在尝试转发本地端口):

me@macbook:~ $ ls /mnt/NFSDirectory
[null]
me@macbook:~ $ ssh -fN -L :3049:rasnu.local:2049 rasrho.local
me@macbook:~ $ sudo mount -t nfs -o port=3049 localhost:/media /mnt/NFSDirectory
mount_nfs: can't mount /media from localhost onto /mnt/NFSDirectory: Connection refused

我将继续进行实验,看看这是否只是我的 Mac 的一些异常行为,以及我是否可以通过公共互联网成功隧道传输此 NFS 挂载。

答案1

还请尝试为 mountd 端口创建一个 ssh 隧道,然后使用 mount 选项进行挂载mountport=$MOUNTD_PORT_ID

sudo netstat -l您可以在 nfs 服务器上运行来找到 mountd 端口,并查看 mountd 正在监听什么。

因此,如果 mountd 正在监听 939,则创建到它的隧道。

ssh -L 3333:127.0.0.1:939 -N $NAS_SERVER

那么 mount 命令将会像这样

sudo mount -t nfs -o port=3049,mountport=3333 localhost:/media /mnt/NFSDirectory

相关内容