systemctl
有一个--host
选项,用于在名称主机上执行命名的 systemctl 命令。手册页建议这在引擎盖下使用 ssh,所以在我的情况下,这对我来说更加令人困惑
systemctl --host root@pc2 is-active docker
不工作(没有输出,退出代码:)1
,但是
ssh root@pc2 systemctl is-active docker
是(输出:active
,退出代码:)0
。
我似乎找不到调试它的方法。systemctl 命令的设置-o verbose
不再提供任何输出。
知道可能有什么问题或如何调试吗?
更新
使用journalctl -f | grep ssh
onpc2
我已经能够看到systemctl --host root@pc2 is-active docker
运行时,ssh 连接似乎成功(Accepted publickey for root from IP-of-PC1...
)。
该命令确实使用 SSH,但它实际上并没有远程执行 systemctl——它旨在直接与远程系统的 D-Bus IPC 通道对话。为此,它
systemd-stdio-bridge
在远程机器上调用,该机器连接到 D-Bus“系统总线”并来回中继消息。然后,您可以让本地 systemctl 对远程 systemd 进行 API 调用,通过 SSH 检索数据并在本地对其进行格式化。一个可能的问题是您的远程系统根本没有运行 D-Bus 系统总线(即可能没有
dbus-daemon --system
或没有dbus-broker --system
进程)。在这种情况下,直接远程 systemctl 调用仍然可以工作,因为它有一个用于直接与 pid1 对话的后备“私有”套接字——但 systemd-stdio-bridge 助手将无法工作,因为它只是设计用于连接到完全工作的总线。用于
strace
查看 systemctl 在后台运行什么:...以及它能够连接到哪些套接字(作为 root 它将使用私有套接字,作为非 root 使用一般系统总线):