ソリューション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 何も印刷しないでください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し、chrootaを使用して必要なネットワーク構成を設定できます。これにより、sshfsデフォルトのインストール名前空間内で実行できます。

答え2

言ったようにフィリップの答えip netns execこれは別々のインストール名前空間で実行されるため、予想される動作です。トリックは、完全なコマンドではなくsshネットワーク通信のために実行することです。ip netns execsshfs

つまり、次のことはしないでください。

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など)でも機能します。

関連情報