背景:搭建靶场测试环境的时候需要把docker文件拖到Ubuntu Server里,没有图形界面不能通过直接拖拽的方式实现复制。需要通过命令行工具进行文件的传输和复制。
1. 使用 VMware tool
方法:通过VMware tool创建共享文件夹,实现本地与虚拟机间的通信。
步骤:
- 在虚拟机关闭状态下,在设置中配置共享文件夹;
- 在ubuntu server中安装vmware-tools工具,然后重启;
- 启动ubuntu server,挂载共享文件夹;
步骤一 配置共享文件夹
步骤二:在ubuntu中安装open-vm-tools
sudo apt update
sudo apt installs open-vm-tools -y
步骤三:挂载共享文件夹并复制文件
-
列出vmware共享文件夹的名称
vmware-hgfsclient -
创建挂载点(例如在/mnt下)
sudo mkdir -p /mnt/docker_share -
使用 vmhgfs-fuse挂载共享文件夹
sudo vmhgfs-fuse .host:/docker_share /mnt/docker_share -o allow_other.host/docker_share中的docker_share需与在VMware中设置的共享文件夹名称一致;allow_other选项允许普通用户访问该挂载点,设置为只有root能访问时可以省略。
-
验证挂载
ls /mnt/docker_share -
复制文件到Ubuntu server中(将共享文件夹中的所有内容复制到home目录下):
cp -r /mnt/docker_share/* ~/ -
复制完成后可以取消挂载:
sudo unmount /mnt/docker_share
步骤三 挂载文件夹后将文件夹复制到虚拟机中
附,open-vm-tools的重启方法:
sudo systemctl restart open-vm-tools
2. 其他工具:scp, rsync
其他传输文件的工具:
- scp(基于ssh,适合单次传输)
- rsync(支持断点续传,并能增量同步,适合较大或需要多次传输的文件夹)
https://blog.sciencenet.cn/blog-3054301-1492239.html (ssh传输方法参考)
拓展思考
💡 图形界面的拖拽复制原理是什么?走的是什么协议?是如何实现的?
- VMware 自定义的一套虚拟机与宿主机之间的私有通信协议;
| 组件 | 作用 | 无图形界面时 |
|---|---|---|
| 宿主机 VMware 窗口 | 捕获拖拽事件,通过虚拟通道发起通信 | 正常捕获,但无人应答 |
| VMCI / Backdoor 通道 | 宿主机与虚拟机间的通信管道 | 存在,但虚拟机内无处理程序 |
| VMware Tools(vmtoolsd) | 接收拖拽通知,进行文件传输 | 存在,但缺少图形插件,拒绝响应 |
| 图形会话(X11/Wayland) | 提供拖拽目标窗口,传递事件 | 缺失,导致拖拽事件无法被虚拟机内部接收 |
| 图形应用程序(如文件管理器) | 最终接收文件并写入磁盘 | 缺失,没有可接收文件的程序 |
拓展思考回答 from deepseek