如何在 Azure VM 上设置 FTP

Posted

技术标签:

【中文标题】如何在 Azure VM 上设置 FTP【英文标题】:How to set up FTP on Azure VM 【发布时间】:2013-08-27 15:50:02 【问题描述】:

我需要一些帮助来在我的 Azure VM 实例上设置 FTP。

虚拟机是 Windows Server 2012 R2。我已经设置了 Web 服务器角色并在 IIS 中创建了一个 FTP 站点。我已确认我可以使用

访问 FTP 服务器
ftp command: open localhost

我还在为标准端口 21 配置的 Azure 门户上为 VM 配置了一个 FTP 端点。

最后,我创建了一个防火墙规则以允许所有流量进出端口 21。

现在,当我尝试从我的家用计算机 FTP 到它时,我可以看到服务器公共 DNS 名称正在解析到正确的 IP 和端口,但无法建立连接。

我是否在某处遗漏了配置步骤?

谢谢

【问题讨论】:

你搞定了吗?我有同样的问题superuser.com/q/643115/166855 【参考方案1】:

如果您不介意使用 FileZilla FTP 服务器,

这是我所做的,以启用与我的 VM 的 FTP 连接。

    转到 Azure VM (manage.windowsazure.com),并添加 2 个端点:
      名称:FTP(协议 TCP,公共端口 21,私有端口 21) 名称:FTP 被动(协议 TCP,公共端口 60000,私有端口 60000)
    返回虚拟机(通过 RDP),打开端口 21 的连接,并在 Windows 防火墙入站规则上打开 60000。 下载并打开 FileZilla 服务器。 单击编辑 -> 用户并根据需要添加用户和共享目录。 单击编辑 -> 设置。在侧边栏上点击被动模式设置。 勾选“使用自定义端口范围”并输入 60000 - 60000 在 ip4specific 部分,选择单选按钮“使用以下 ip”,然后输入您的 xxxx.cloudapp.net。 保存并运行服务器。就是这样,您现在可以从 VM 外部连接到 FTP。

希望对某人有所帮助。

干杯

【讨论】:

请注意,对于被动 ftp 端点,您必须选择“自定义”服务以允许任意端口范围(即本例中的 60000)【参考方案2】:

Ronald Wildenberg 于 2012 年 7 月“Hosting FTP on IIS 7.5 in a Windows Azure VM”对此进行了精彩的演练。他回应David's answer。这些是他经历的阶段:

    首先,您需要一个虚拟机。我需要一台带有 SQL Server 数据库的 Windows 机器,因此我从可用模板中选择了“Microsoft SQL Server 2012 评估版”。 计算机启动后,您可以通过管理门户底部的连接选项进行 RDP 访问。 当您进入时,您需要配置 IIS。所需步骤的摘要: 将“Web 服务器 (IIS)”角色添加到服务器。 添加您需要的 IIS 功能。 在管理门户中使用公共和专用端口 80 将 TCP 端点添加到您的 VM。 要启用 FTP,请确保为您的 IIS 角色启用“FTP 服务器”角色服务: 下一步是在 IIS 中创建实际的 FTP 站点。右键单击 IIS 管理器中的“站点”并选择“添加 FTP 站点...” 指定站点的名称和本地路径: 指定绑定和 SSL 信息: 最后指定谁应该有权访问 FTP 站点。 您现在应该能够从 VM 中访问 FTP 站点。打开命令提示符,输入ftp 127.0.0.1 并登录 对于活动 FTP,您需要允许访问端口 21(FTP 命令端口)和 20(FTP 数据端口),因此您需要向 VM 添加两个端点 配置被动 FTP。为此,我们需要告诉 IIS FTP 服务器它可以用于数据连接的端口范围,并且我们需要向 VM 添加与此端口范围相对应的端点。 为被动数据连接配置端口范围和外部 IP 地址。这可以在 IIS 管理器中找到 外部 IP 地址应该是您可以在 Azure 管理门户中找到的虚拟 IP 地址。 如果您无法在 IIS 管理器中指定数据通道端口范围,请使用 appcmd 实用程序,该实用程序可在 %windir%\system32\inetsrv:appcmd set config /section:system.ftpServer/firewallSupport /lowDataChannelPort:7000 /highDataChannelPort:7014 中找到 您可以在 Azure 门户中指定所有 15 个新端点,但这需要很长时间,因此请使用 Windows Azure Powershell cmdlets。 下载发布设置文件。一种方法是启动 Windows Azure Powershell 并使用 cmdlet 'Get-AzurePublishSettingsFile'。它会打开一个浏览器并允许您下载与您的 Windows Live id 对应的发布设置文件。 下载发布设置文件后,您可以使用“Import-AzurePublishSettingsFile”cmdlet 将其导入,我们已准备好开始添加端点。 我只是创建了一个文本文件,其中包含我想要运行的命令列表并将其复制到 Powershell 窗口中:Get-AzureVM -ServiceName 'myServiceName' -Name 'ftpportal' | Add-AzureEndpoint -Name 'FTPPassive00' -Protocol 'TCP' -LocalPort 7000 -PublicPort 7000 | Update-AzureVM 其中“myServiceName”是我的云服务的名称,“ftpportal”是我的虚拟服务器的名称机器。 虽然 Windows 防火墙似乎允许所有需要的流量,但您还需要在防火墙上启用状态 FTP 过滤:netsh advfirewall set global StatefulFtp enable 重新启动 FTP Windows 服务,我们应该可以启动并运行: net stop ftpsvc net start ftpsvc

值得遵循这些步骤in the original article 尤其是因为他为每个步骤都提供了有用的屏幕截图,但我认为值得在这里广泛引用以防万一。文章还提到Active FTP vs. Passive FTP, a Definitive Explanation 值得一读。

如果我可以报告,在执行这些步骤后,您的基于 Azure VM 的 FTP 服务器将可以正常工作并且可以访问,那就太好了。但不幸的是the steps above did not fix it for me :-(

【讨论】:

这些步骤自 2014 年 9 月起仍然有效。作为一名承包商,在过去的几年里,我为不同的公司多次经历过这些步骤。无论本地环境如何,始终存在问题的一件事是 Filezilla 和 IIS。根据我的经验,它很少起作用。我读了 Filezilla 作者的一篇文章,他声称这是 MS 的错,因为他们实施协议的方式不标准,他不会更改 Filezilla 代码来修复 MS 错误。因此,简而言之,如果您正在使用 Filezilla(我喜欢它)并且仍然遇到问题,请尝试使用不同的 ftp 客户端。 我还要补充一点,如果您在登录时遇到错误 530 消息,请记得在 IIS 管理器中检查 FTP 身份验证。如果您需要用户名和密码,那么您将需要启用(至少)默认禁用的基本身份验证。 我还想强调,应该强制执行 TLS/SSL(幸运的是,如今 IIS 的默认设置)。但是,启用 StatefulFtp 实际上会适得其反,因为有状态过滤器无论如何都不能与 TLS 一起使用,而且我已经看到报告说它实际上破坏了它(我自己没有测试它)。无论如何,它绝对不必启用,即使对于未加密的连接也是如此。 在添加每个端点后使用Update-AzureVM 非常低效且缓慢。应该添加所有端点并只调用一次更新。看我的例子:winscp.net/eng/docs/guide_azure_ftps_server#firewall 查看下面的链接,通过附加磁盘在 Azure 中逐步设置 FTP。包括防火墙设置和问题gingercart.com/Home/big-data/…【参考方案3】:

在上面的 15 点列表中徘徊了一段时间后,我收到了 MS 正在尝试传递的消息 - “没有(简单的)FTP 适合你”...

所以我回到了古老而开放的 Linux 世界——使用 Cygwin 设置了一个 SCP 服务器。 你甚至可以获得一个远程外壳作为奖励......

1) 运行 Cygwin 安装程序 - https://cygwin.com/setup-x86.exe

2) 在“选择包”中搜索

cygrunsrv(选择“管理员”下的一项) openssh(选择'Net下的那个)

3) 完成后,启动 Cygwin 终端,然后输入:

ssh-host-config -y -pwd S0me-Str0ng-pa55w0rd

cygrunsrv -S sshd

4) 从 Azure VM 添加一个 SSH 端点

5) 在 Windows 防火墙中,为 TCP 端口 22 添加入站规则

还有 viola - 你当然可以使用 WinSCP、Notepad++ 和 Putty 进行连接...

注意事项:

Unix 是区分大小写的,所以输入你的用户时要准确,例如大写A的管理员 您的驱动器位于 /cygdrive 下(c:\ 位于 /cygdrive/c 等)

祝你好运!

【讨论】:

【参考方案4】:

dumbledad's answer 中的链接目前不可用。按照那里的步骤操作后,我仍然无法在新的 Azure VM 上运行被动 FTP。

经过一番搜索,我找到了这篇创建文章Passive FTP and dynamic ports。这是一个很棒的演练,并提供了一个简单的脚本,可以从您的 VM 运行,以便在一分钟内启动并运行 FTP。如果您要设置多个 VM,则该脚本是一种设置 FTP 访问的更快方法,而不是手动配置 IIS 和 Azure 端点。

【讨论】:

【参考方案5】:

您需要添加一个额外的端口范围,ftp 服务器将为每个 ftp 连接选择。

您需要创建一堆输入端点,每个端点代表指定端口范围内的一个端口。请注意,您的输入端点数量有限(不确定确切数量,但您应该能够轻松地在连续端口中打开 50 个输入端点)。然后只需将 ftp 服务器设置为使用相同的范围。此外,您需要将输入端点公共端口映射到相同的私有端口号,否则将无法正确创建连接。

【讨论】:

听起来不错。我不确定如何有效地设置这么多端点。似乎天蓝色的门户一次只允许一个,这是很多配置。有没有办法一次设置所有这些端口? 这很容易使用 PowerShell 或 CLI。下载 Azure PowerShell cmdlet 并查看 Add-AzureEndpoint

以上是关于如何在 Azure VM 上设置 FTP的主要内容,如果未能解决你的问题,请参考以下文章

Azure经典门户创建VM,如何设置使用静态IP地址?

如何在 Azure VM 上安装 NVIDIA 图形驱动程序

如何使用 NSG 限制从 Internet 直接访问 Azure Public LoadBalancer 后端池 VM

如何在azure VM上公开HTTP端口[关闭]

如何使用 Azure 中的所需状态配置 (DSC) 进行 Windows VM 的代理设置?

排查在 Azure 中新建 Windows VM 时遇到的部署问题