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
何も印刷しないでくださいon 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
し、chroot
aを使用して必要なネットワーク構成を設定できます。これにより、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
は生成されるようです。一時的な設置nfs
その名前空間(など)でマウントを実行し、sshfs
コマンドが完了すると、MOUNT名前空間が消え、マウントポイントも消えます。
したがって、一般的な回避策は、そのnsenter
コマンドを使用してNET名前空間でmountコマンドを実行することです。
たとえば、マウントコマンドが次の場合は、次のコマンドをsshfs -p PORT USER@HOST: MOUNTPOINT
実行します。
nsenter --net=/run/netns/ns-secured sshfs -p PORT USER@HOST: MOUNTPOINT
そして、マウントポイントはグローバル(デフォルト)ネームスペースに保持されます。また、他の種類のリモートネットワークFS(NFSなど)でも機能します。