在Linux虚拟机的日常使用中,向虚拟机内传输文件是常见需求,无论是配置文件、数据集还是开发工具,都需要高效、安全的方式完成传输,根据虚拟机与宿主机的连接方式、文件大小、安全需求等不同场景,可选择多种传输方法,本文将详细介绍几种主流的文件传输方式,包括原理、操作步骤及注意事项,帮助用户根据实际情况选择最适合的方案。
共享文件夹(虚拟机工具内置)
共享文件夹是虚拟化工具提供的便捷功能,通过将宿主机目录映射到虚拟机内部,实现双向文件访问,适合需要频繁交换小文件的场景。
原理
依赖虚拟机工具(如VMware Tools、VirtualBox Guest Additions)提供的驱动程序,在宿主机与虚拟机之间建立虚拟文件系统,支持拖拽、复制粘贴等操作。
操作步骤(以VMware为例)
- 启用共享文件夹:在虚拟机设置中选择“选项”->“共享文件夹”,点击“添加”,选择宿主机要共享的目录,并勾选“启用此共享”。
- 安装VMware Tools:在虚拟机菜单中选择“重新安装VMware Tools”,挂载光盘后,进入/mnt/cdrom目录,解压压缩包并执行
./vmware-install.pl
(一路回车即可)。 - 挂载共享文件夹:安装完成后,在虚拟机命令行执行
mount -t vmhgfs .host:/ /mnt/hgfs
,此时可通过cd /mnt/hgfs
访问共享文件。
注意事项
- 共享文件夹权限需配置:若宿主机目录对当前用户无读写权限,需在宿主机中修改目录权限(如
chmod 757 /宿主机共享目录
)。 - VirtualBox用户需安装“增强功能(Guest Additions)”,挂载命令为
mount -t vboxsf 共享名 /mnt/share
(共享名需与VirtualBox中设置的名称一致)。
优缺点
优点:支持拖拽操作,双向传输实时,无需额外工具;缺点:依赖虚拟机工具,跨平台兼容性(如VirtualBox与VMware命令不同)可能带来混淆。
SCP(Secure Copy)安全拷贝
SCP基于SSH协议,通过加密通道传输文件,适合命令行操作,安全性高,是Linux系统间传输文件的常用方式。
原理
利用SSH的加密传输能力,将文件从本地系统安全复制到远程虚拟机,支持递归目录传输。
操作步骤
- 确保SSH服务开启:在虚拟机中安装
openssh-server
(Ubuntu/Debian:apt install openssh-server
;CentOS/RHEL:yum install openssh-server
),并启动服务systemctl start sshd
,设置开机自启systemctl enable sshd
。 - 获取虚拟机IP:在虚拟机中执行
ip a
或ifconfig
,查看IP地址(如168.1.100
)。 - 执行传输命令:在宿主机终端中,使用以下命令上传文件:
scp 本地文件路径 用户名@虚拟机IP:虚拟机目标路径 # 示例:上传本地/home/user/data.txt到虚拟机的/root/目录 scp /home/user/data.txt root@192.168.1.100:/root/
下载文件则交换源路径和目标路径:
scp 用户名@虚拟机IP:虚拟机文件路径 本地路径 # 示例:下载虚拟机/root/data.txt到本地/home/user/ scp root@192.168.1.100:/root/data.txt /home/user/
注意事项
- 防火墙需放行22端口:在虚拟机中执行
firewall-cmd --add-port=22/tcp --permanent
并重载防火墙firewall-cmd --reload
。 - 传输大文件时加
-r
参数递归目录(如scp -r /本地目录 用户名@IP:/目标目录
),-P
可指定非默认SSH端口(如-P 2222
)。
优缺点
优点:无需额外安装工具,Linux/macOS原生支持,传输加密;缺点:纯命令行操作,大文件传输速度较慢,需手动输入密码(可配置SSH密钥免密)。
SFTP(SSH File Transfer Protocol)
SFTP是基于SSH的文件传输协议,提供交互式命令行和图形界面客户端,支持目录操作和权限管理,功能比SCP更灵活。
原理
在SSH连接基础上构建文件传输层,支持文件上传、下载、删除、重命名等操作,类似FTP但更安全。
操作步骤
- 安装SSH服务:同SCP步骤,确保虚拟机开启SSH。
- 使用图形客户端(以FileZilla为例):
- 打开FileZilla,协议选择“SFTP”,主机填虚拟机IP,用户名和密码为虚拟机系统账号,端口默认22。
- 登录后,左侧为宿主机文件,右侧为虚拟机文件,直接拖拽即可传输。
- 使用命令行:
sftp 用户名@虚拟机IP # 登录后,put命令上传,get命令下载 sftp> put /本地文件 /虚拟机路径 sftp> get /虚拟机文件 /本地路径
注意事项
- SFTP默认使用SSH 22端口,需确保SSH服务正常;部分系统需配置
/etc/ssh/sshd_config
中Subsystem sftp /usr/lib/ssh/sftp-server
。 - 若遇到权限问题,可检查虚拟机目标目录的写权限(
chmod 755 目标目录
)。
优缺点
优点:支持目录传输、文件权限管理,图形客户端操作直观;缺点:依赖SSH服务,传输速度受网络和SSH加密影响。
U盘/移动设备挂载
通过USB直通功能将物理U盘连接到虚拟机,挂载后访问文件,适合无网络环境或大文件传输。
操作步骤
- 启用USB直通:
- VMware:虚拟机设置->USB控制器->勾选“启用USB 2.0”或“USB 3.0”,虚拟机菜单“连接USB设备”->选择U盘。
- VirtualBox:设备->USB->选择U盘(需提前安装VirtualBox Extension Pack)。
- 识别U盘:在虚拟机命令行执行
fdisk -l
,查看U盘设备名(如/dev/sdb1
,注意区分系统磁盘)。 - 创建挂载点并挂载:
mkdir /mnt/usb # 创建挂载目录 mount /dev/sdb1 /mnt/usb # 挂载U盘
- 访问文件:通过
cd /mnt/usb
访问U盘内容,使用后执行umount /mnt/usb
卸载。
注意事项
- 避免挂载系统盘:确认
/dev/sdb1
为U盘(可通过lsblk
查看设备大小和类型)。 - 若U盘为NTFS格式,需安装
ntfs-3g
(apt install ntfs-3g
),挂载命令改为mount -t ntfs-3g /dev/sdb1 /mnt/usb
。
优缺点
优点:适合大文件传输,无需网络;缺点:依赖USB直通功能,需手动挂载/卸载,跨平台兼容性(如Windows虚拟机挂载Linux分区可能需额外工具)。
网络共享(NFS/Samba)
通过NFS(Linux间)或Samba(跨平台)实现网络共享,适合长期、多用户访问的场景。
NFS(Network File System)
- 服务器端(宿主机)配置:
- 安装
nfs-kernel-server
:apt install nfs-kernel-server
。 - 配置
/etc/exports
:添加共享目录及权限(如/home/share *(rw,sync,no_root_squash)
,表示所有IP可访问,rw
为读写权限)。 - 重启服务:
systemctl restart nfs-kernel-server
。
- 安装
- 客户端(虚拟机)配置:
- 安装
nfs-common
:apt install nfs-common
。 - 挂载共享目录:
mount 宿主机IP:/home/share /mnt/nfs
。 - 开机自动挂载:编辑
/etc/fstab
,添加宿主机IP:/home/share /mnt/nfs nfs defaults 0 0
。
- 安装
Samba(兼容Windows/Linux)
- 服务器端(宿主机)配置:
- 安装
samba
:apt install samba
。 - 配置
/etc/samba/smb.conf
:添加共享段(如[share] path=/home/share valid users=user1 writable=yes
)。 - 创建Samba用户:
smbpasswd -a user1
(需提前创建系统用户useradd user1
)。 - 重启服务:
systemctl restart smbd nmbd
。
- 安装
- 客户端(虚拟机)访问:
- Linux:安装
smbclient
,执行smbclient //宿主机IP/share -U user1
或挂载mount -t cifs //宿主机IP/share /mnt/smb -o username=user1
。 - Windows:在文件资源管理器地址栏输入
\宿主机IPshare
,输入用户名密码访问。
- Linux:安装
注意事项
- NFS需111端口,Samba需139/445端口,防火墙需放行(如
ufw allow 111/tcp
)。 - NFS配置简单但仅限Linux,Samba跨平台兼容性好,适合混合环境。
优缺点
优点:适合长期共享,多用户同时访问;缺点:配置较复杂,需额外服务支持。
云存储同步
通过云存储(如百度云盘、阿里云OSS、Google Drive)中转文件,适合跨设备、跨平台传输。
操作步骤
- 宿主机上传文件:将文件上传至云存储(如网页端、客户端)。
- 虚拟机下载文件:在虚拟机中通过网页下载或安装云存储客户端(如
rclone
支持多平台)。 - 使用rclone同步:
- 安装rclone:
curl https://rclone.org/install.sh | sudo bash
。 - 配置云存储:
rclone config
,按提示添加云存储(如百度网盘)。 - 同步文件:
rclone copy 本地目录 云存储:远程目录
(上传)或rclone copy 云存储:远程目录 本地目录
(下载)。
- 安装rclone:
注意事项
- 依赖网络速度,大文件上传/下载耗时;注意云存储服务费用和隐私政策。
优缺点
优点:跨设备、跨平台通用,适合备份和远程传输;缺点:依赖网络,传输速度受云存储服务限制。
不同方法对比
方法 | 适用场景 | 额外配置需求 | 安全性 | 操作复杂度 | 传输速度 |
---|---|---|---|---|---|
共享文件夹 | 频繁小文件交换,图形界面操作 | 安装虚拟机工具 | 中 | 低 | 快(本地直通) |
SCP | 命令行传输,小到中等文件 | 开启SSH服务,防火放行22 | 高 | 中 | 中等 |
SFTP | 交互式传输,目录/权限管理 | 开启SSH服务,客户端工具 | 高 | 中 | 中等 |
U盘挂载 | 大文件,无网络环境 | USB直通,手动挂载 | 高 | 中 | 快(USB 3.0+) |
网络共享(NFS/Samba) | 长期共享,多用户访问 | 配置NFS/Samba服务,防火放行端口 | 中 | 高 | 中等(依赖网络) |
云存储同步 | 跨设备远程传输,备份 | 云存储账号,网络连接 | 中 | 低 | 依赖网络速度 |
相关问答FAQs
Q1: 使用SCP传输文件时提示“Permission denied”,如何解决?
A: 可能原因及解决方法:(1)虚拟机目标路径权限不足:使用chmod 757 目标路径
赋予写权限;(2)SSH密钥认证失败:检查~/.ssh/authorized_keys
是否包含正确公钥,或改用密码传输;(3)防火墙拦截:执行firewall-cmd --list-ports
确认22端口已开放,未开放则执行firewall-cmd --add-port=22/tcp --reload
;(4)用户权限问题:确认用户对目标目录有执行权限(x
权限),可通过chmod a+x 目标目录
添加。
Q2: 共享文件夹挂载失败,提示“mount error: No such device”,如何处理?
A: 主要原因是虚拟机工具未正确安装或共享文件夹未启用,解决步骤:(1)VMware:检查“虚拟机设置”->“选项”->“共享文件夹”是否已添加共享目录并勾选“启用”;重新安装VMware Tools:在虚拟机菜单选择“重新安装VMware Tools”,挂载光盘后运行./vmware-install.pl
;(2)VirtualBox:检查“设备”->“共享文件夹”->“共享文件夹设置”是否添加共享目录并勾选“固定分配”;安装增强功能:在虚拟机菜单选择“安装增强功能”,挂载光盘后运行VBoxLinuxAdditions.run
;(3)挂载命令错误:VMware共享文件夹挂载点为/mnt/hgfs
,VirtualBox为/mnt/share
(需与共享名一致),检查命令格式是否正确。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/16329.html