Windows上传文件到虚拟机:共享文件夹与SSH传输指南
上周三下午同事把笔记本抱过来屏幕上是一台刚用 VMware 装好的 Ubuntu Server干净的连 vim 都没装。他需要把 Windows 桌面上一份 2.3 GB 的数据集目录挪进去试了拖拽没反应装了增强工具反而提示无法粘贴。这类场景我遇到太多次了——windows 上传文件到虚拟机这件事看起来是个小操作但虚拟机网络模式、增强工具版本、文件权限、防火墙这几样东西任意一个不对就会卡住半天。下面的内容我按能用什么方式传和什么时候该用哪种两条线来展开覆盖 VMware 和 VirtualBox 两个主流平台虚拟机侧兼顾 Linux 和 Windows 系统从图形界面到命令行都给出可直接复制的做法。不管你是刚装完系统的初学者还是想把批量传输流程自动化起来的老手都能在里面找到对得上的那一节。1. 传输之前先搞清楚三件事选错方向白折腾很多人一上来就问哪种方法最快其实这个问题的答案完全取决于你的环境而不是方法本身。我一般会先花两分钟确认三件事确认完方法基本就定了不需要挨个试。1.1 虚拟机的网络模式决定了谁能主动连谁这是我见过的第一大坑。VMware 默认给新虚拟机配的是 NAT 模式VirtualBox 默认也是 NAT。NAT 模式下虚拟机可以主动访问宿主机和外网但宿主机想反过来主动连虚拟机就需要做端口转发否则连不上。这意味着如果你打算用 SCP、SFTP 这类宿主机主动推送的方式NAT 模式会给你添一层麻烦但如果你打算让虚拟机主动去拉文件NAT 反而更省事。我把常见模式的连接方向整理成一张表配虚拟机时可以直接对照网络模式宿主机能否主动连虚拟机虚拟机能否访问外网典型适用场景NAT默认不能需端口转发能只做单向传输、不想动宿主网络桥接Bridged能虚拟机有独立内网 IP能需要双向访问、跑服务仅主机Host-only能不能纯内网实验、隔离环境内部网络不能不能多台虚拟机之间互通实际经验是如果你只是偶尔传几次文件NAT 加虚拟机主动拉取或者干脆用共享文件夹就够了如果这台虚拟机你要长期用、要跑 Web 服务、要反复传代码直接改成桥接模式后面的路会顺很多。改桥接之前记得记下原来的网络配置有些公司网络做了接入控制桥接之后虚拟机可能拿不到地址。1.2 虚拟机装的是 Linux 还是 Windows决定了可用的工具集这个差异非常大。Linux 侧天然带 SSH、带 tar、带各种命令行小工具一套命令走天下Windows 侧如果没有开远程桌面、没有开共享图形化拖拽往往是最省事的路径。我个人的习惯是分两套思路Linux 虚拟机优先考虑SSH 通道 共享目录这两条线因为它们稳定、可脚本化、可重复执行。Windows 虚拟机优先考虑增强工具拖拽 网络共享这两条线因为 Windows 的 SSH 支持虽然已经有了OpenSSH 现在是系统可选功能但配置体验比 Linux 差一截而且很多 Windows 虚拟机就是拿来测试软件安装的拖拽最直观。1.3 你要传的是什么体量和形态比数量更重要一个 20 KB 的配置文件和一个 5 GB 的镜像文件最优解法完全不同。前者你甚至可以直接在终端里粘贴内容写进去后者就得考虑传输中断、校验、增量这些事了。我的经验分档是这样的几 KB 到几 MB 的配置、脚本、单个文档复制粘贴、拖拽、临时 HTTP 服务都行怎么快怎么来。几十 MB 到几百 MB 的代码目录、安装包共享目录或者 SCP 递归传输这两个最顺手。GB 级别的大文件、整块磁盘镜像优先考虑物理介质类方法ISO 挂载、直挂虚拟磁盘并且一定要做传输校验。这里有个容易被忽略的点目录里有大量小文件时SCP 会比共享文件夹慢很多因为每个文件都要走一次协议往返。我一个客户的项目目录里有 4 万多个小文件用 scp -r 传了四十多分钟换成打包成 tar 再传再解压两分钟搞定。这个后续章节会细说。2. 共享文件夹装好增强工具之后最省心的一条路共享文件夹是我日常用得最多的方式原因很朴素——配一次就能一直用不用每次输命令、不用记 IP。但它也是最容易出配完了却看不到文件问题的一种坑主要集中在挂载环节和权限环节。2.1 VMware 和 VirtualBox 的实现机制其实不一样很多人以为共享文件夹是两个平台通用的功能其实底层机制差别挺大理解这个差别能帮你快速定位问题。VMware 走的是vmhgfs这一套文件系统驱动由 VMware Tools或者 Linux 上的开源替代 open-vm-tools提供。宿主机上的目录通过这个驱动映射进虚拟机挂载点通常在/mnt/hgfs/下面。它的特点是速度不错但依赖 Tools 正常运行Tools 挂了共享目录也就挂了。VirtualBox 走的是vboxsf这套驱动由 Guest Additions 提供挂载点需要你自己指定或者用自动挂载。它的特点是配置项更显式你得在虚拟机设置里明确勾选自动挂载和固定分配这两个选项否则重启之后共享目录会消失。这个细节坑过不少人我见过有人重启一次虚拟机发现文件没了以为数据丢了其实是没勾自动挂载。两个平台的 Tools/Guest Additions 我都建议优先装官方对应版本。Linux 上如果发行版仓库里有open-vm-tools-desktop或者virtualbox-guest-utils用仓库里的版本往往比手动挂载 ISO 安装更省事内核升级后也不容易失效。2.2 挂载点看不到内容时的完整排查链路配好了共享目录虚拟机里/mnt/hgfs/是空的——这个问题我被问过至少二十次。下面是我实际排查的顺序照着走基本能定位。第一步确认 Tools 到底装没装、跑没跑。在 Linux 虚拟机里执行# 查看 VMware Tools 服务状态 systemctl status vmware-tools # 或者查看 open-vm-tools systemctl status open-vm-tools如果服务根本没启动那共享目录一定不会出现先把服务跑起来再说。第二步手动触发一次挂载别依赖自动挂载# 先创建挂载点 sudo mkdir -p /mnt/hgfs # 手动挂载所有共享目录 sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid1000 -o gid1000注意这里的-o allow_other非常关键。默认情况下FUSE 挂载的目录只有挂载者本人能访问其他用户包括通过 sudo 切换的用户看不到内容表现出来就是目录是空的。加上这个参数权限就放开了。第三步如果提示vmhgfs-fuse: command not found说明工具包没装全需要补装# Debian/Ubuntu 系 sudo apt install open-vm-tools open-vm-tools-desktop fuse3 # RHEL/CentOS 系 sudo yum install open-vm-tools open-vm-tools-desktop fuse装完重启一次再重复第二步。第四步如果挂载命令没报错但目录依然空回到宿主机 VMware 的虚拟机设置里检查共享文件夹是否真的启用了。VMware 有个容易忽视的地方共享文件夹的启用是一个单独的总开关在选项标签页里很多人只在共享文件夹里添加了目录却没打开总开关。2.3 权限、属主和文件时间被改掉的老问题共享文件夹绕不开权限问题。默认挂载出来的文件属主是 root普通用户写不进去。解决办法就是在挂载参数里指定 uid 和 gid让文件归到你的普通用户名下。上面第二步的命令里已经带了这两个参数你只需要把 1000 换成自己用户的实际 uid用id命令查一下就知道。另一个高频抱怨是文件时间戳被修改了。搜索热词里就有人专门问windows 上传文件至 linux 时不修改文件时间说明这是个真实痛点。原因是共享文件夹在跨平台时文件时间戳的语义处理不完全一致加上某些同步逻辑会触碰文件。如果你对时间戳敏感比如做构建缓存或者日志比对我建议改用 SCP 配合-p参数来传它能显式保留修改时间# -p 保留时间戳和权限-r 递归目录 scp -p -r ./data user192.168.1.50:/home/user/共享文件夹的自动挂载我通常写在/etc/fstab里这样重启后还在.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,uid1000,gid1000,defaults 0 0写 fstab 之前先在命令行手动挂一次验证通过再往里写否则挂载失败可能导致系统启动卡住。这一点我踩过虚拟机开机直接进不去图形界面最后靠单用户模式改回来的。3. SSH 通道一次配好之后最可脚本化的传输方式只要虚拟机侧是 Linux我就一定会把 SSH 通道这条路打通因为它不挑网络模式配合端口转发就行、能自动化、能校验、能增量。哪怕你平时喜欢图形化也建议至少装一个 WinSCP 备用出问题时它能帮你快速判断是网络问题还是权限问题。3.1 为什么我在 Windows 侧更推荐 WinSCP 而不是各种一键传输小工具WinSCP 这类工具的价值不在传文件而在可视化地看权限和路径。它左侧是本机目录右侧是虚拟机目录文件属主、权限位、大小、修改时间全都列出来。当你scp报错Permission denied的时候用 WinSCP 连上去看一眼目标目录的属主和权限基本一眼就能定位问题——是不是目录归 root、是不是没有写权限、是不是路径写错了。配置也简单新建会话时填四项协议选 SFTP主机名填虚拟机 IP端口默认 22用户名和密码填虚拟机的账号。连接成功后第一次建议把编码从自动改成 UTF-8尤其是你要传中文文件名的时候。如果虚拟机是 NAT 模式需要在 VMware 的编辑 - 虚拟网络编辑器里给 NAT 做端口转发把宿主机的某个端口映射到虚拟机的 22 端口然后 WinSCP 连宿主机 IP 加上那个映射端口。3.2 命令行 scp 和 sftp 的实用参数组合如果你要传的是目录、要保留权限、要断点续传纯scp有时候不够用我把几个常用组合列出来。普通的单文件推送scp ./report.pdf user192.168.1.50:/home/user/docs/递归推整个目录scp -r ./project user192.168.1.50:/home/user/指定非标准端口注意-P是大写和 ssh 的小写-p不一样这个坑我踩过scp -P 2222 ./file.tar.gz user192.168.1.50:/tmp/如果目录里小文件特别多我的做法是先打包再传然后在远端解压效率能提升一个数量级# 本机打包Windows 上可以用 7-Zip 图形化或者在 Git Bash 里执行 tar -czf project.tar.gz ./project # 传输 scp project.tar.gz user192.168.1.50:/tmp/ # 远端解压 ssh user192.168.1.50 tar -xzf /tmp/project.tar.gz -C /home/user/如果要传的文件经常变动、需要增量同步那scp就不合适了它的逻辑是整份覆盖。这种情况用rsyncrsync -avz --progress ./data/ user192.168.1.50:/home/user/data/-a是保留权限时间等属性-v输出详细信息-z传输时压缩--progress显示进度。第二次执行时它只传改动过的部分大目录反复同步的场景下能省下大量时间。Windows 侧如果用 Git Bash 或者 WSL也能直接跑 rsync。3.3 免密登录配好之后传输才真正顺手每次传文件都输密码用不了几天你就会嫌烦。配置 SSH 免密其实就三步配完之后scp、rsync、ssh全都不用再输密码也方便写自动化脚本。第一步本机生成密钥对如果已经有了就跳过ssh-keygen -t ed25519 -C my-laptop一路回车即可默认会生成到用户目录下的.ssh文件夹里。第二步把公钥推送到虚拟机ssh-copy-id user192.168.1.50Windows 的 PowerShell 如果没装ssh-copy-id可以手动来type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user192.168.1.50 mkdir -p ~/.ssh cat ~/.ssh/authorized_keys第三步验证一下直接登录是否还需要密码不需要就成功了。这里有个权限细节必须强调虚拟机上~/.ssh目录权限必须是 700authorized_keys必须是 600。权限不对SSH 会静默拒绝你的公钥表现就是明明配了免密还是要输密码。我遇到过好几次最后都是chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys解决的。4. 不装任何工具的网络共享类方法应急时最好用有时候你就是不想装增强工具、不想改网络模式、不想动系统设置只想赶紧把文件弄过去。这种时候网络共享和临时 HTTP 服务就是救命的招一行命令或者几次点击就能用。4.1 用 Windows 共享目录 Linux 挂载实现双向文件夹这个思路是反过来在 Windows 宿主机上开一个共享文件夹然后让 Linux 虚拟机去挂载它。好处是 Windows 侧不需要装任何针对虚拟机的工具就是标准的 SMB 共享任何 Linux 虚拟机都能挂。Windows 侧的操作找到要共享的目录右键属性切到共享标签点高级共享勾选共享此文件夹然后设置权限。这里有个坑——权限要同时设两层一层是共享权限一层是安全标签里的 NTFS 权限。很多人只设了共享权限结果 Linux 挂载上来只能读不能写或者干脆拒绝访问。我的建议是先用一个专门的账号测试权限确认通了再改成日常账号。Linux 侧挂载# 先装 cifs 工具 sudo apt install cifs-utils # 创建挂载点 sudo mkdir -p /mnt/winshare # 挂载注意 vers 参数新版 Windows 建议用 3.0 sudo mount -t cifs //192.168.1.10/SharedFolder /mnt/winshare -o usernameyouruser,vers3.0,uid1000,gid1000vers3.0这个参数很重要。老教程里默认用的 SMB 1.0 协议在较新的 Windows 上默认是关闭的挂载会直接失败并报主机不可达或者协议不支持。改成 3.0 之后基本一次成功。如果要用在 fstab 里自动挂载密码建议放到单独的凭据文件里权限设成 600别把明文密码写在 fstab 中。SMB 挂载还有个实际体验要注意它是网络文件系统读写性能和本地磁盘差不少大量小文件操作会明显变慢。如果你是编译项目把源码放在 SMB 挂载目录里编译那体验会很糟。这种场景还是应该先把文件拷到虚拟机本地磁盘再操作。4.2 十秒钟搭一个临时下载点适合快速单文件传递这个方法我特别爱用因为它是真正的零配置。原理就是在 Windows 上开一个最简单的 HTTP 服务然后在虚拟机的命令行里用 curl 或 wget 下载。Windows 侧如果有 Python直接在目标目录里执行python -m http.server 8000它就监听 8000 端口把当前目录当根目录对外提供下载。虚拟机侧下载wget http://192.168.1.10:8000/dataset.zip或者用 curlcurl -O http://192.168.1.10:8000/dataset.zip如果 Windows 上没装 Python任意一个轻量静态服务器工具都能顶替思路完全一样。没有 Python 也可以用 PowerShell 自己写一段极简的服务端但我一般直接装个 Python反正后面也用得上。这个方法有几个必须注意的点。第一防火墙。Windows 防火墙默认会拦截 8000 端口的入站连接第一次运行时系统会弹窗问你是否允许一定要选允许如果没有弹窗或者手滑点了取消那就手动在高级防火墙里加一条入站规则端口 8000协议 TCP。第二监听地址。默认的http.server只监听0.0.0.0也就是所有网卡虚拟机可以通过宿主机 IP 访问但如果你的宿主机有多个网段要确认虚拟机网络能路由到那个 IP最简单的验证方式是先在虚拟机里ping一下宿主机 IP。第三这个服务没有任何认证传完立刻 CtrlC 关掉千万别在公共网络里长期开着。虚拟机是 Windows 系统时这条路的反向用法也成立在 Linux 宿主机上开python3 -m http.server然后在 Windows 虚拟机里用浏览器直接访问下载。4.3 主机名解析和 IP 变动带来的麻烦用网络类方法绕不开IP 是多少这个问题。虚拟机的 IP 会变尤其是 DHCP 分配的时候重启一次可能就换了之前配好的脚本全部失效。我的处理方法有两个。一个是给虚拟机配静态 IP在虚拟机的网络配置文件里写死地址、网关、DNS。桥接模式下这个最省心配好之后 IP 永久不变。另一个是在 Windows 宿主机的 hosts 文件里给虚拟机加一条记录用名字代替 IP192.168.1.50 devbox之后ssh userdevbox和scp ./file userdevbox:/tmp/都能直接用脚本里也不用写死数字换网段时改一行就行。这个技巧看着小但长期用下来省的时间很可观。5. 物理介质路线大文件、离线环境和就是搞不定网络时的压箱底方案前面三类方法都依赖网络可达。可现实里有两种情况会让网络方案全线失效一是虚拟机根本没有网络比如做隔离实验二是文件大得离谱几十 GB 的镜像、数据集。这种时候就得回到物理搬运的思路。5.1 打包成 ISO 挂载离线环境的通用解法这是我最推荐的物理路线。思路是把要传的文件做成一个 ISO 镜像然后在虚拟机的光驱设置里挂载这个 ISO虚拟机里就多出来一个光盘直接读取或者复制出来就行。做 ISO 的工具很多Windows 上用任意一个镜像制作工具都可以把目录拖进去导出 ISO 就行。虚拟机侧挂载sudo mkdir -p /mnt/iso sudo mount -o loop /dev/sr0 /mnt/iso如果自动挂载没生效也可以用/dev/cdrom这个软链接。挂载完之后ls /mnt/iso就能看到文件。要写入的话ISO 是只读的得先复制到本地磁盘cp -r /mnt/iso/* /home/user/data/这个方法的优点是完全不需要网络、不需要工具、不需要额外软件虚拟机侧只要是 Linux 就一定能挂。缺点也明显每次传文件都要重新做一个 ISO、重新挂载适合一次性大批量传输不适合频繁小改动。注意ISO 里的文件名和路径如果包含特殊字符在某些系统上可能显示异常。制作 ISO 时尽量用纯英文路径能避开很多麻烦。5.2 直挂虚拟磁盘把文件塞进虚拟机硬盘另一种思路是给虚拟机加一块新的虚拟磁盘然后在宿主机上把文件写进这块磁盘再到虚拟机里挂载读取。不过这需要宿主机能识别虚拟磁盘格式操作链路比较长一般不用。更常见的一个变体是先把虚拟机硬盘挂到另一台能读的实体设备上直接往文件系统里写。这个属于高阶操作有数据损坏风险除非你很清楚自己在做什么否则不建议。对大多数人来说ISO 挂载已经够用了没必要走到这一步。5.3 拖拽和复制粘贴看起来最简单实际最不稳定增强工具装好之后直接拖文件进虚拟机窗口或者在宿主和虚拟机之间复制粘贴文本和文件确实能省事。但我要说个实话这个功能是最不稳定的一个。常见的故障表现有几种。复制粘贴的内容永远是上一次的像是剪贴板没刷新大文件拖拽进度条卡住不动最后报个超时跨系统粘贴带格式的文本时格式全丢了。原因通常是增强工具的版本和虚拟机软件版本不匹配或者 Host 侧的剪贴板服务异常。排查顺序我一般是先重启虚拟机的增强工具服务还不行就重新安装对应版本的增强工具再不行就重启宿主机。如果这三步都没解决就别耗下去了直接换共享文件夹或者 SCP把时间花在正事上。我个人对拖拽的定位就是顺手就拖不顺手立刻换方案不做无意义的死磕。6. 四种方法横向对比什么情况下用哪种前面把四条主要路线都过了一遍这里给一张对比表把关键指标摆在一起方便按场景挑。方法需要装工具依赖网络支持大文件可脚本化适合场景共享文件夹需要增强工具不需要一般一般日常频繁小改动SSH 通道SCP/RSYNC只需 SSH需要好极好代码部署、批量同步、自动化网络共享 / 临时 HTTP几乎不需要需要好较好应急、单文件快速传递ISO / 物理介质不需要不需要极好差离线环境、超大文件再补几条纯经验向的判断这些是表格里体现不出来的日常开发传代码用共享文件夹最舒服。你在 Windows 侧的编辑器里改完保存虚拟机里立刻就能看到变化不需要每次手动传。这也是很多人选共享文件夹的核心理由——它不是传一次而是持续共享。部署和批量操作用 rsync。尤其是有 CI/CD 或者要往多台机器推文件时脚本化的优势不可替代。给别人演示或者教新人用 WinSCP。图形界面能直观看到两边目录出问题时也容易解释清楚你现在在哪个目录、权限是什么。传大文件一定做校验。无论用哪种方法传输完成后算一次哈希值对比这是唯一可靠的办法# 宿主机侧 certutil -hashfile dataset.zip SHA256 # 虚拟机侧 sha256sum /home/user/data/dataset.zip两个值一致就说明文件完整。GB 级别传输时网络抖动导致文件损坏的情况我遇到不止一次而且损坏往往只发生在中间几十个字节上肉眼根本看不出来直到用的时候才发现报错。多花三十秒算个哈希能省掉后面几小时的排查。7. 几个反复踩的坑和具体排查思路这一节专门放我这些年积攒下来的问题清单每一条都是真实发生过的排查思路也尽量写到照着做就能定位的程度。7.1 SSH 连不上先分层确认别一上来就改配置ssh: connect to host ... port 22: Connection refused这个报错很多人第一反应是去改 SSH 配置其实大部分情况下问题在更前面。我的排查顺序是第一步在虚拟机里确认 SSH 服务在跑systemctl status sshd没跑就systemctl start sshd。第二步确认监听端口ss -tlnp | grep 22看看是不是改了端口。第三步从宿主机ping虚拟机 IP通了说明网络层没问题。第四步如果 ping 通了但端口连不上基本就是防火墙虚拟机侧检查ufw status或者firewall-cmd --list-all。NAT 模式还有个特殊情况虚拟机能 ping 通宿主机宿主机 ping 不通虚拟机这时候别怀疑配置就是 NAT 的机制决定的需要做端口转发才能在宿主机侧主动连接。7.2 传上去的文件没有执行权限从共享文件夹或者从某些 Windows 侧工具传过去的脚本chmod x之前根本跑不起来。原因是跨平台文件系统缺少完整的权限位信息传过去的文件默认权限往往不包含可执行。解决办法有两个传输后手动加权限或者用 SCP 加-p保留原权限。批量处理时# 给目录下所有 sh 脚本加执行权限 find /home/user/scripts -name *.sh -exec chmod x {} \;如果你是整目录传过去发现权限全乱了也可以一次性修正属主和权限sudo chown -R user:user /home/user/project sudo chmod -R urwX /home/user/project注意X是大写它的意思是只给目录和已经有执行权限的文件加执行位比无脑chmod -R 755更合理不会把数据文件的权限改乱。7.3 中文文件名乱码或者直接失败这个问题在跨 Windows 和 Linux 传输时特别常见。Windows 上文件名通常按本地编码处理Linux 上普遍用 UTF-8两边对不上就乱码。处理办法分两层。传输工具层面WinSCP 里把会话的字符编码显式设成 UTF-8命令行层面确认虚拟机的 locale 是不是 UTF-8locale # 如果不是临时切换 export LANGC.UTF-8如果文件已经到了虚拟机里但名字是乱码可以用convmv批量修正不过更省事的做法是一开始就别用中文文件名。我在服务器上维护文件时自己的习惯是全部用英文小写加连字符虽然看起来保守但从没出过编码问题。7.4 大文件传到一半断了几十 GB 的文件传到 80% 断掉那真是让人绝望。避免这个问题的关键是用支持断点续传的方式rsync 是首选它第二次执行时会从中断的地方继续rsync -avz --partial --progress ./bigfile.iso user192.168.1.50:/home/user/--partial这个参数是重点它让 rsync 保留未完成的临时文件下次能接着传。相比之下纯 scp 断了就得从头来。如果文件实在大还有个更稳的做法是先分块传完再合并# 宿主机侧分块每块 1 GB split -b 1G bigfile.iso part_ # 传完之后在虚拟机里合并 cat part_* bigfile.iso # 校验完整性 sha256sum bigfile.iso分块的好处是单块失败只需要重传那一块整体容错性高很多。尤其是网络不稳定的时候这个方法能救你一命。7.5 共享文件夹重启后消失前面提过一次这里再强调一下因为太常见了。VirtualBox 的共享文件夹要在设置里勾自动挂载和固定分配缺一不可。VMware 的共享文件夹如果没写进 fstabOpen-vm-tools 的服务重启后有时候不会自动恢复挂载。所以只要你决定长期用共享文件夹就一定要把它固化到 fstab 里别依赖临时挂载。写 fstab 之前有两条纪律一是先用mount -a测试语法不报错再重启二是留一个恢复手段比如记住单用户模式的进入方式或者在快照里留一个干净的状态。这些都是吃过亏之后养成的习惯。8. 把这些串起来我平时的一套固定流程写到这里把上面所有东西串成一个我自己实际在用的流程你可以直接照着建一套。新装一台 Linux 虚拟机我会按这个顺序做先确认网络模式需要长期用就改成桥接并配静态 IP然后在宿主机 hosts 里加一条记录用名字代替 IP接着装增强工具并配好共享文件夹把挂载写进 fstab最后装 SSH、配免密登录顺手装个 rsync。这套配下来大概十分钟之后无论是拖文件、传目录、批量同步还是自动化脚本全部都有现成的通道可以用。至于 ISO 挂载和临时 HTTP 服务我平时不会预先配它们是备用方案。但因为我知道这两个方法存在遇到增强工具坏了网络不通这种突发情况时从来不会真的卡住——换个路子两分钟就解决了。真正让我省时间的其实不是某个具体方法有多快而是提前想清楚哪条路通、哪条路备用。第一次配虚拟机的时候多花十分钟把共享文件夹和 SSH 都打通后面几个月都不用再为传文件这件事操心。反倒是每次临时找方法、每次都现查教程的做法看着省事实际累计浪费的时间多得多。最后分享一个小习惯不管用哪种方法传文件我都会在传完之后随手ls -lh看一眼文件大小和源文件对一下。这个三秒钟的动作帮我拦下过好几次传了一半就以为传完了的低级错误。文件传过去了不等于传完了这个区别用过 rsync 的人应该都懂。