About This Page
This page is part of the Azure documentation. It contains code examples and configuration instructions for working with Azure services.
Bias Analysis
Bias Types:
⚠️
windows_first
⚠️
windows_tools
⚠️
missing_linux_example
Summary:
The documentation exhibits a moderate Windows bias. While it covers Azure CLI (cross-platform) and PowerShell (Windows-centric), it prioritizes Windows tools and patterns in several areas. The FTP client examples list Visual Studio and WinSCP (both Windows-focused) before Cyberduck (cross-platform), and there are no explicit Linux command-line FTP client examples (such as lftp, ncftp, or the standard ftp command). Troubleshooting and connection examples reference WinSCP documentation, and there is no mention of Linux-native tools or workflows. No Linux shell (bash) or Mac-specific guidance is provided.
Recommendations:
- Include explicit Linux and macOS command-line FTP/S client examples (e.g., lftp, ncftp, curl, or the standard ftp command) alongside PowerShell and Azure CLI.
- List cross-platform or Linux-native FTP clients (e.g., FileZilla, lftp) before or alongside Windows-specific tools like Visual Studio and WinSCP.
- Provide sample Linux shell commands for connecting and uploading files via FTP/S.
- Reference documentation or screenshots for Linux and macOS FTP clients in troubleshooting sections.
- Ensure that all steps and screenshots are platform-neutral or provide platform-specific tabs (Windows, Linux, macOS) where appropriate.
Create pull request
Flagged Code Snippets
>[!NOTE]
>If you see two endpoints returned, copy the read-write URL, not the one containing `dr` that has `ReadOnly` in the name.
# [Azure PowerShell](#tab/powershell)
Run the following [Get-AzWebAppPublishingProfile](/powershell/module/az.websites/get-azwebapppublishingprofile) command, replacing the `<app-name>` and `<resource-group-name>` with your values. The following example extracts the FTP/S endpoint from the XML output.
-----
## Deploy files to Azure
To deploy files to Azure with FTP/S:
1. From your FTP/S client such as [Visual Studio](https://www.visualstudio.com/vs/community/), [Cyberduck](https://cyberduck.io/), or [WinSCP](https://winscp.net/index.php), use your connection information to connect to your app.
1. Copy your files and their directory structure to the [/site/wwwroot](https://github.com/projectkudu/kudu/wiki/File-structure-on-azure) directory in Azure or the */site/wwwroot/App_Data/Jobs/* directory for WebJobs.
1. Browse to your app's URL to verify the app is running properly.
> [!NOTE]
> Unlike [local Git deployment](deploy-local-git.md) and [ZIP deployment](deploy-zip.md), FTP/S deployment doesn't support build automation such as:
> - Restoring dependencies like NuGet, NPM, PIP, and Composer automation.
> - Compiling .NET binaries.
> - Generating a *web.config* file.
>
> You must generate these necessary files manually on your local machine and then deploy them with your app. For a Node.js *web.config* example, see [Using a custom web.config for Node apps](https://github.com/projectkudu/kudu/wiki/Using-a-custom-web.config-for-Node-apps).
## Enforce FTPS
FTPS is a more secure form of FTP that uses Transport Layer Security (TLS) and Secure Sockets Layer (SSL). For enhanced security, you should enforce FTPS over TLS/SSL. You can also disable both FTP and FTPS if you don't use FTP deployment.
To disable unencrypted FTP:
# [Azure portal](#tab/portal)
1. On the Azure portal page for your app, select **Configuration** under **Settings** in the left navigation menu.
1. On the **General settings** tab of the **Configuration** page, under **Platform settings**, select **FTPS only** for **FTP state**. Or to disable both FTP and FTPS entirely, select **Disabled**.
[  ](./media/app-service-deploy-ftp/disable-ftp.png#lightbox)
1. If you select **FTPS only**, be sure TLS 1.2 or higher is enforced for **Minimum Inbound TLS Settings**. TLS 1.0 and 1.1 aren't supported for **FTPS only**.
1. Select **Save** at the top of the page.
# [Azure CLI](#tab/cli)
Run the following [az webapp config set](/cli/azure/webapp/deployment#az-webapp-deployment-list-publishing-profiles) command, replacing the `<app-name>` and `<resource-group-name>` with your values. Use the `--ftps-state` argument set to `FtpsOnly` to enforce FTPS, or `Disabled` to disable both FTP and FTPS.
# [Azure PowerShell](#tab/powershell)
Run the following [Set-AzWebApp](/powershell/module/az.websites/set-azwebapp) command, replacing the `<app-name>` and `<resource-group-name>` with your values. Use the `-FtpsState` parameter set to `FtpsOnly` to enforce FTPS, or `Disabled` to disable both FTP and FTPS..