1

我正在研究一个使用 Java API 访问 VCenter 上的 VMWare 虚拟机的 Java 类。

Java API 允许我们连接到 VCenter,访问来宾 VM (CentOS7) 并列出目录中的文件,除了 /tmp 目录之外没有任何问题。

使用参考:文档:GuestFileManager

// filePathToCheck = "/tmp/some-file-to-find.txt
ManagedObjectReference fileManager = ...; // GuestFileManager
ManagedObjectReference vmGuest = ...;  // VirtualMachine
String fileToCheckName = FilenameUtils.getName(filePathToCheck); // -> some-file-to-find.txt
String guestDirectory = filePathToCheck.replace(fileToCheckName,""); // -> /tmp/
guestFiles = vimPort.listFilesInGuest(fileManager, vmGuest, auth, guestDirectory, null, null, null);

我正在使用 GuestFileManager.listFilesInGuest() 并发现对于 /tmp 以外的任何目录,我都可以完全按照它们在 ssh 会话中的显示方式列出目录中的文件。

使用 listFilesInGuest() 查看路径“/tmp”目录,我得到以下列表:

.
..
vmware-root (directory)

即使我的 ssh 会话显示:

.
..
finishedinstall
.font-unix
.ICE-unix
systemd-private-f2b5415058d14dbfa4306235d53fed88-vmtoolsd.service-QN0Muw
.Test-unix
.X11-unix
.XIM-unix

我在 vmware-root 上做了一个发现,它出现在

/tmp/systemd-private-f2b5415058d14dbfa4306235d53fed88-vmtoolsd.service-QN0Muw/tmp/vmware-root

导航到该文件夹​​会显示在 listFilesInGuest() 中找到的文件:

.
..
vmware-root

这很好,我们在真空中操作,但程序将需要从其他程序安装程序和使用“the”/tmp 目录而不是 VMWare 的隐藏位置的接口读取、修改或执行 temp 目录中的文件。

我找不到任何有关重新配置 VMWare 工具的方法的文档,也找不到使用 API 进入 /tmp 目录的方法,我希望 SO 中的某个人会遇到并找到此 VMWare 功能的成功路径。

编辑:通过进一步的测试,我发现这个“特殊”的 tmp 目录只发生在 posix 中,Windows 上的 VMWareTools API 会按照我在所有操作系统中的预期导航。

4

1 回答 1

2

尝试禁用私有 tmp 目录。vmtoolsd 服务应该有一些设置文件。例如:阿帕奇

事实证明(见评论),这样的设置可以在以下位置找到:/usr/lib/systemd/system/vmtoolsd.service

于 2017-04-27T19:01:29.753 回答