把文件上传到虚拟机的Linux服务器,最靠谱的方式是使用scp或sftp命令,Windows用户可以直接用WinSCP图形工具,VMware和VirtualBox用户还可以通过共享文件夹实现免命令互传。 接下来按你的实际环境选方法,以下每种方式都给出具体操作。
linux虚拟机怎么上传文件?先确认这三个前提条件
- SSH服务是否已开启:在Linux虚拟机里执行
systemctl status sshd(或service ssh status),确保显示active (running),没开启就执行sudo systemctl start sshd。 - 虚拟机网络模式:NAT模式下宿主机可以访问虚拟机,但外部设备不行;桥接模式让虚拟机拥有局域网独立IP,更方便,建议在虚拟机设置里把网络改为桥接。
- 你拿到的IP地址对不对:在Linux里执行
ip addr或ifconfig,找到类似192.168.x.x的地址,注意NAT模式下通常是10.0.x.x或172.x.x.x,容易和云主机搞混。
确认完这三点,再选择下面任意一种方法。
文件上传到虚拟机linux服务器的几种方法:按场景选工具
- 临时传一两个小文件:scp命令最快。
- 需要批量传很多文件或目录:rsync或sftp更稳。
- 你用的是Windows,不想敲命令:WinSCP或Xftp拖拽即可。
- 文件在宿主机本地磁盘,且虚拟机是VMware/VirtualBox:共享文件夹是零学习成本方案。
下面逐个拆解。
scp上传文件到虚拟机:单个文件与整个目录命令
scp基于SSH协议,和ssh共用端口和认证,只要你能ssh登录,scp就能用。
- 上传单个文件到Linux虚拟机:
scp /本地路径/文件名 用户名@虚拟机IP:/目标路径/,比如scp /home/user/test.txt root@192.168.1.100:/root/,回车后输入密码。 - 上传整个目录到虚拟机:
scp -r /本地目录 用户名@虚拟机IP:/目标目录,加-r参数递归复制,保留目录结构。 - 修改端口:如果SSH端口不是22,加
-P 端口号,注意是大写P,例如scp -P 2222 /tmp/test.txt root@192.168.1.100:/root/。 - 保留文件属性:加
-p参数,可以保留修改时间、权限等元数据。
如果本地是Windows,可以在cmd或PowerShell里直接用scp命令,Windows 10 1809以上版本自带OpenSSH客户端,也可以安装Git Bash,用同样语法,举个例子,在cmd里输入
scp C:UsersAdministratortest.txt root@192.168.1.100:/root/就能上传,如果路径中有空格,用双引号包住整个路径。
scp常见报错:连接超时和权限拒绝
- 连接超时:检查IP地址是否可达,先在宿主机
ping 虚拟机IP,不通就检查网络模式或防火墙。 - Permission denied (publickey,password):说明密码错误或SSH禁止密码登录,可以改用密钥认证,或者修改
/etc/ssh/sshd_config里PasswordAuthentication yes,然后重启sshd。 - No such file or directory:目标路径不存在,先确认虚拟机里对应目录已创建,或者用
/tmp/这类绝对存在的目录。
用sftp交互式上传文件到Linux虚拟机:不记命令也能传
sftp是SSH自带的文件传输协议,和scp一样安全,但支持交互式操作,可以像FTP一样浏览目录、上传下载。
- 连接虚拟机:
sftp 用户名@虚拟机IP,输入密码后进入sftp交互界面。 - 上传文件:在sftp提示符下,
put /本地路径/文件名,文件就会传到当前远程目录。 - 上传多个文件:
mput .txt,批量上传所有txt文件。 - 下载文件:
get /远程路径/文件名,下载到本地当前目录。 - 切换本地目录:
lcd 本地路径;查看远程目录:ls、pwd。
sftp适合不想记scp复杂参数的人,而且可以边传边看目录结构,缺点是传输大目录时,mput -r不支持递归上传整个目录,需要先lcd到目录里再逐个传,或者用put -r(OpenSSH 8.0以上支持),如果本地是Windows,建议先lcd切到桌面,再用put file.zip,避免反斜杠转义问题。
window上传文件到linux虚拟机:用WinSCP拖拽就行
Windows用户最友好的方式是WinSCP,一个免费开源的图形化SFTP/FTP客户端,它支持scp和sftp协议,直接连接虚拟机。
WinSCP连接虚拟机配置步骤
- 下载安装WinSCP,打开后填写主机名(虚拟机IP)、端口(默认22)、用户名、密码。
- 文件协议选SFTP或SCP,推荐SFTP,兼容性更好。
- 点击登录,左侧是本地文件,右侧是虚拟机文件,直接拖拽就能上传。
- 支持断点续传,大文件传一半断了,重新拖一次会继续。
WinSCP还内置了命令控制台,可以在传输窗口下方直接敲scp命令,适合混合操作。
Xftp与Xshell配合使用
如果你用Xshell管理终端,可以搭配Xftp,在Xshell会话里点工具栏的Xftp图标,自动继承会话配置,直接打开文件传输窗口,Xftp支持标签式多会话、传输队列和速度限制,批量上传几百个文件也不卡。
虚拟机linux和本地文件互传:共享文件夹和挂载目录
VMware和VirtualBox都提供共享文件夹功能,把宿主机目录直接挂载到虚拟机里,文件复制变成普通文件操作,适合高频互传。
VMware Tools设置共享文件夹
- 在VMware Workstation里,虚拟机菜单栏点击“虚拟机” -> “设置” -> “选项” -> “共享文件夹”。
- 选择“总是启用”,点击“添加”选择宿主机目录,名称任意,比如
shared。 - 在Linux虚拟机里,共享文件夹默认挂在
/mnt/hgfs/下,执行ls /mnt/hgfs/就能看到你添加的目录。 - 如果看不到,需要安装open-vm-tools:
sudo apt install open-vm-tools(Ubuntu/Debian)或sudo yum install open-vm-tools(CentOS)。
VirtualBox增强功能挂载共享目录
- 安装增强功能:VirtualBox菜单“设备” -> “安装增强功能”,然后在Linux里执行
sudo /media/cdrom/VBoxLinuxAdditions.run。 - 设置共享文件夹:在虚拟机设置里选“共享文件夹”,添加宿主机目录,勾选“自动挂载”。
- 重启后共享目录出现在
/media/sf_共享名,需要把当前用户加入vboxsf组:sudo usermod -aG vboxsf 你的用户名,否则只有root能访问。
注意:共享文件夹方式要求虚拟机图形界面或能访问/mnt/hgfs,最小化安装的服务器版也能用,但需要额外挂载命令,如果你用的是KVM/libvirt虚拟机,没有现成的共享文件夹功能,可以走Samba或NFS,日常用scp就够了。
这几种上传方式怎么选:一张表看懂
| 使用场景 | 推荐方式 | 学习成本 | 传输速度 | 是否需要额外软件 |
|---|---|---|---|---|
| 临时传单个小文件 | scp | 低 | 快 | 无需,系统自带 |
| 批量传目录和大量文件 | rsync或sftp | 中 | 快 | rsync需安装,sftp自带 |
| Windows用户日常操作 | WinSCP | 低 | 中 | 需安装WinSCP |
| 本地虚拟机高频互传 | 共享文件夹 | 最低 | 最快 | 需装VMware Tools/VBox增强 |
| 无SSH端口可用的极端情况 | HTTP网盘中转 | 中 | 受网速限制 | 需临时开服务 |
如果虚拟机在云端而不是本地,共享文件夹不可用,优先用scp或WinSCP,如果虚拟机在本地,且你不想记任何命令,共享文件夹是最省心的。
Q&A:关于linux虚拟机上传文件的常见问题
为什么我scp上传文件到虚拟机特别慢?
大概率是虚拟机的网卡模式或宿主机防火墙导致,NAT模式下走的是虚拟网卡转换,速度本来就比桥接慢,另外检查虚拟机里是否启用了流量整形或限速,把网络改成桥接模式后,速度通常会明显提升。
虚拟机Linux服务器没有图形界面,能用WinSCP上传吗?
可以,WinSCP连接的是SSH服务,和虚拟机有没有图形界面无关,只要虚拟机能ping通,SSH端口开放,WinSCP就能正常上传下载,最小化安装的Linux服务器版同样适用。
上传到虚拟机的文件权限不对,执行报错怎么办?
scp和sftp默认保留不了文件属主,上传后属主通常是登录用户,如果目标程序需要root权限,用sudo chown root:root 文件名改属主,或者chmod +x 文件名加执行权限,建议上传前先确认目标目录的属主和权限要求。
回到最初的问题:把文件上传到虚拟机的Linux服务器,本质上就是一次SSH文件传输,掌握scp和sftp,再配合WinSCP和共享文件夹,就能覆盖从临时到高频的所有场景。 选哪种方式,取决于你的操作系统、虚拟机平台和文件量大小。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/605126.html




