我想指示 systemd 在指定的、预先存在的网络命名空间中“运行单元”,特别是在命名空间中启动单元的进程。
在VM内部,主机地址是10.0.2.2,本地地址是10.0.2.15。(虚拟盒子)。这在主机端被转换为 127.0.0.1。连接:
sudo mount -vvvt nfs4 -o clientaddr=127.0.0.1 10.0.2.2:/srv /mnt
Run Code Online (Sandbox Code Playgroud)
我指定了 clientaddr 是因为我认为问题可能是由于地址不匹配造成的,但它不会改变任何东西。几分钟后,客户端返回通常的 Permission Denied 消息,访问被服务器拒绝。
在服务器端,我运行
# rpc.mountd -d all -F
# rpc.idmapd -vvvf
# rpc.nfsd -d
Run Code Online (Sandbox Code Playgroud)
我使用 systemd,所以我也在监视日志以获取任何输出。当我发出挂载请求时,通过网络可以看到以下内容:
reply ERR 20: Auth Bogus Credentials (seal broken)
Run Code Online (Sandbox Code Playgroud)
但除了一些启动消息外,日志(应该有 rpc.nfsd 的输出)或 rpc.mountd 或 rpc.idmapd 的输出中没有任何内容出现。实际上,在 rpc.mountd 的情况下,我偶尔会得到以下信息:
rpc.mountd: auth_unix_ip: inbuf 'nfsd 127.0.0.1'
rpc.mountd: auth_unix_ip: client (nil) 'DEFAULT'
Run Code Online (Sandbox Code Playgroud)
据我所知(请纠正我!)没有关于 NFS 功能的其他信息来源,也没有涉及配置。我已经为每个命令指定了详细模式,所以我不知道我应该如何诊断这个问题。
我假设是我的导出文件有问题,如下:
/srv 127.0.0.1(rw,sync,no_subtree_check,no_root_squash)
Run Code Online (Sandbox Code Playgroud)
但我宁愿实际上从系统那里得到一些关于出了什么问题的反馈,而不是通过反复试验来摆弄我的导出文件。那么,有谁知道我可以在哪里找到更多关于正在发生的事情的信息?
谢谢!
编辑
我最近跑了 exportfs -rav
现在客户端立即返回“不允许操作”,并且 rpc.mountd 输出:
rpc.mountd: auth_unix_ip: inbuf 'nfsd 127.0.0.1'
rpc.mountd: v4root_create: path …Run Code Online (Sandbox Code Playgroud) 我设法弄乱了系统上的一些共享库,现在我的 shell 无法运行,从而将我锁定在系统之外。在远程系统上配置的ssh、sftp和scp似乎都依赖于 shell,因此这些替代方案已不再适用。确实,这不是一个大问题,因为我有一些远程手可以将我的 shell 更改为sh通过控制台。
不过,我很好奇,深入了解 SSH 协议的机制,是否可以在不调用/etc/passwdshell 的情况下对远程系统进行身份验证和执行某些操作(例如,修改 )?
编辑
公平地说,对于建议在ssh 命令字符串(例如)之后ssh myhost /bin/sh指定替代命令/shell 的人:手册页确实指出:
If command is specified, it is executed on the remote host instead of a login shell.
Run Code Online (Sandbox Code Playgroud)
这肯定会令人困惑。