解决方法1

解决方法1

在这里,我曾经netns使用VPN,但sshfs无法正常工作。这是我尝试过的:

root@ubuntu:/mnt# ip netns exec secured sshfs -d -o sshfs_debug -p PORT USER@HOST: MOUNTPOINT
SSHFS version 2.8
FUSE library version: 2.9.7
nullpath_ok: 0
nopath: 0
utime_omit_ok: 0
executing <ssh> <-x> <-a> <-oClearAllForwardings=yes> <-oPort=PORT> <-2> <USER@HOST> <-s> <sftp>
Server version: 3
Extension: [email protected] <1>
Extension: [email protected] <2>
Extension: [email protected] <2>
Extension: [email protected] <1>
Extension: [email protected] <1>
unique: 1, opcode: INIT (26), nodeid: 0, insize: 56, pid: 0
INIT: 7.26
flags=0x001ffffb
max_readahead=0x00020000
   INIT: 7.19
   flags=0x00000011
   max_readahead=0x00020000
   max_write=0x00020000
   max_background=0
   congestion_threshold=0
   unique: 1, success, outsize: 40

也就是说,ls在挂载点上没有列出任何内容,即根本没有条目sshfs 不打印任何内容ls,所以这看起来也很奇怪。可能是什么问题呢?

答案1

不幸的是,这是预期的行为。

http://man7.org/linux/man-pages/man8/ip-netns.8.html

ip netns exec 通过创建安装命名空间并将所有每个网络命名空间配置文件绑定安装到 /etc 中的传统位置,自动处理此配置、网络命名空间不感知应用程序的文件约定。

这意味着当您使用 时ip netns exec <namespace> <command>,该命令不仅会在不同的网络命名空间中执行,还会在不同的挂载命名空间中执行。按照sshfs您的要求成功安装,但您看不到该安装。


解决方法1

您只需打开网络命令提示符即可从那里开始工作:

ip netns exec secured bash
sshfs -d -o sshfs_debug -p PORT USER@HOST: MOUNTPOINT
# ... use MOUNTPOINT

解决方法2

创建共享后,您可以重新输入该挂载命名空间:

    ip netns exec secured sshfs -d -o sshfs_debug -p PORT USER@HOST: MOUNTPOINT
    ps -ef | grep sshfs
    root 1880     1  0 13:15 ?        00:00:00 sshfs -p PORT USER@HOST:. MOUNTPOINT

    # Now run a command (ls) in the same mount namespace
    nsenter --mount -t 1880 ls

    # You can of course run a command prompt there
    nsenter --mount -t 1880 bash

解决方法3

请注意,这可能会更复杂,而且我还没有正确探索此选项。

根据上面的引用,挂载命名空间用于额外的网络配置。但理论上这不是必需的,因为您可以使用chroot.

您可以尝试使用输入网络命名空间nsenter --net并使用 achroot设置所需的网络配置。然后,这将允许您sshfs在主安装命名空间内执行。

答案2

正如提到的那样菲利普的回答,这是预期的行为,因为ip netns exec在单独的安装命名空间中执行。诀窍是仅ssh通过运行(进行网络通信)ip netns exec,而不是整个sshfs命令。

也就是说,不要这样做:

ip netns exec secured sshfs -p PORT USER@HOST: MOUNTPOINT

做这个:

sshfs -o ssh_command="ip netns exec secured ssh" -p PORT USER@HOST: MOUNTPOINT

答案3

我遇到过这个问题并四处询问。

事实上,ip netns它似乎创造了一个临时安装命名空间并执行该命名空间中的任何挂载(nfssshfs等),一旦命令完成, MOUNT 命名空间就消失了,挂载点也消失了。

因此,通用解决方案是仅使用nsenter命令在 NET 命名空间中执行挂载命令。

例如,如果您的挂载命令是:sshfs -p PORT USER@HOST: MOUNTPOINT 则执行:

nsenter --net=/run/netns/ns-secured sshfs -p PORT USER@HOST: MOUNTPOINT

并且挂载点将保留在全局(默认)命名空间中。它还适用于其他类型的远程网络 FS(例如 NFS)。

相关内容