我有一项学校作业要研究命名空间。
对于所有这些,我都举了例子,但 UTS 的演示并不简单。我读过 UTS 命名空间经常用于虚拟服务器出于管理目的(在本地网络中命名计算机),我想通过在 2 个不同的 UTS 命名空间中拥有 2 个 SSH 服务器来展示这一点,并显示连接是由“ssh user@hostnameinns1”和“ssh user@hostnameinns2”建立的。 ssh 服务器在系统启动时运行,而我正在终端中执行以下操作:
$ sudo unshare -u
$ hostname hostnameinns2
$ service sshd start
我的实际设置是 Windows 内的 Ubuntu 虚拟机,具有端口 22 转发和“桥接模式”网络。我从 Windows 连接,但不幸的是它只连接到第一个 ns (原始/系统),但不连接到非共享的:
ssh: Could not resolve hostname hostnameinns2: No such host is known.
另外,$ service sshd stop
在第一个 ns 中执行第二个 ns 之前没有帮助。
非常感谢任何帮助。提前致谢。
答案1
要使用 SSH 实现此目的,您(至少)需要生成 UTS 和网络命名空间(或在不同端口上运行 SSH 的第二个副本)。
对于 UTS 情况,系统调用手册页中有一个示例setns
(man 2 setns
-http://man7.org/linux/man-pages/man2/setns.2.html#EXAMPLE)以及您使用的命令的手册页,unshare
(man 1 unshare
-http://man7.org/linux/man-pages/man1/unshare.1.html#EXAMPLES)。
根据unshare
手册页:
# touch /root/uts-ns
# unshare --uts=/root/uts-ns hostname FOO
# nsenter --uts=/root/uts-ns hostname
FOO
# umount /root/uts-ns
建立持久UTS命名空间,并修改主机名。然后使用 nsenter 输入名称空间。通过卸载绑定引用来销毁命名空间。