如何向Azure虚拟机传文件

时间:2024-04-07 19:57:06

1.通过远程桌面的复制、粘贴

就是Ctrl-C/Ctrl-V,只对Windows有效。其原理就是本地和远程的剪贴板是共享的

我们可能知道在本地和远程桌面间,可以用复制粘贴传递文本。实际上,文件拷贝也是可以的。比如,首先在本地进行文件复制

如何向Azure虚拟机传文件

然后切换到远程桌面,在目标目录下执行粘贴

如何向Azure虚拟机传文件

这样就拷贝过去了。反向拷贝也一样简单

这种方法最省事,不用任何配置。不过这种方式不能拷贝大量的文件

2.通过远程桌面的本地资源访问

最简单的方式是通过远程桌面的本地资源访问功能。在虚拟机页底部点击“连接”后,浏览器会提示下载rdp文件。

如何向Azure虚拟机传文件

不要直接打开该文件,而是选择另存,将其存在本地

如何向Azure虚拟机传文件

对于下载的RDP文件,不要直接打开,而是右键,选择Edit

如何向Azure虚拟机传文件

然后在本地资源页中,点击More,然后选中本地要访问的磁盘

如何向Azure虚拟机传文件

这样登录虚拟机后,就可以在资源管理器里面看到本地磁盘,直接进行文件拷贝。

如何向Azure虚拟机传文件

这种访问还比较方便,不过缺点是受网络影响较大。如果文件较大或者较多,效率比较低

3.通过Blob存储中转

Azure存储提供了近乎无限的存储空间,我们可以把要上传的文件先上传到Blob存储,然后再从Azure的各虚拟机下载

Blob的上传下载需要Blob工具,比如Azure Storage Explorer, CloudXplorer等,具体可参考http://blog.csdn.net/shaunfang/article/details/8647557

在本地和Azure虚拟机上,都需要安装这个工具

4.通过FTP

用FTP看似是个好主意,大家都会用。但这里存在一个问题,就是Azure的安全设计。Azure的虚拟机全部位于防火墙后,所有的外部访问均需事先定义端口映射。对于通常的Web访问来说,不是什么问题,因为我们会打开80端口。但是FTP就有点麻烦了。

首先,我们需要了解下FTP的工作原理。FTP基于两个端口运作,21端口是命令端口,用于接受客户连接,此外还有一个端口专门用于传数据。这个端口的确定有两种方式,分别是Passive和Active。其中Active的意思是,客户端主动监听一个端口,然后让服务器反向连接至该端口进行数据传递。这对于大部分场景不可用,因为客户端往往在内网,内网开的端口外网是访问不了的。于是FTP缺省用Passive模式,即服务器随机开一个端口,告诉客户端,然后让客户端连接至该端口传数据。由于这个端口是随机创建的,自然无法在Azure上提前定义端口映射,FTP也就无法运作了。

那么是不是FTP就没法用了?也不是。FTP服务器都支持指定数据端口范围,如果我们限定数据端口在一个很小的范围内,比如30000-30004,然后我们在Azure上把这些端口都定义了,那么就可以解决FTP的防火墙穿越问题。

下面我们实际测试下,首先我们在一台CentOS上配置VsFtp服务,并在Azure上定义21端口,再用FTP客户端访问

如何向Azure虚拟机传文件

我们发现客户端发送PASV命令后,服务器回传了一个地址100,80,34,101,195,198,这个字符串前4个数字代表IP地址,后两个是端口,而且,每个数字最大255,所以实际的端口号是195*256+198=50118,而IP地址是100.80.34.101,这是虚拟机的内部IP地址。显然,内部IP是无法访问的,于是客户端马上尝试连接外部IP,但由于50118端口没有在Azure防火墙上定义,自然无法连通。

接下来,我们修改vsftp配置,在/etc/vsftpd/vsftpd.conf末尾添加

pasv_min_port=30000
pasv_max_port=30001
表示数据端口采用30000-30001,重启ftp服务

然后进入Azure门户,为这两个端口定义端口映射2013年6月,Azure对端口进行了升级,从门户上无法定义动态端口了(Azure会监测端口状态,如果端口没开则不会转发请求)。只能通过脚本定义,具体方法是,在客户端运行Azure Powershell

Get-AzureVM -Servicename "xxx" -Name "xxx" | Add-AzureEndpoint -Name "FTP-Dynamic-1" -LocalPort 30000 -PublicPort 30000 | Update-AzureVM

Get-AzureVM -Servicename "xxx" -Name "xxx" | Add-AzureEndpoint -Name "FTP-Dynamic-2" -LocalPort 30001 -PublicPort 30001 | Update-AzureVM

运行成功后,可以在门后上看到这些端口

如何向Azure虚拟机传文件

再次使用ftp客户端连接

如何向Azure虚拟机传文件

工作正常了!可见客户端正是用30001访问服务器端数据端口


Windows上配置IISFTP的方法可以参考http://fabriccontroller.net/blog/posts/passive-ftp-and-dynamic-ports-in-iis8-and-windows-azure-virtual-machines/

5. 通过SCP

这个只对Linux有效。由于SCP只需要一个端口,所以不存在FTP动态端口的问题。SCP的端口号跟SSH一样,都是22。Azure在部署linux虚拟机的时候会自动定义该端口号。所以,部署Linux后,直接用SCP客户端访问该虚拟机即可