{"id":544,"date":"2026-08-04T22:54:30","date_gmt":"2026-08-04T22:54:30","guid":{"rendered":"https:\/\/windows-vps.org\/blog\/?p=544"},"modified":"2026-08-04T22:54:30","modified_gmt":"2026-08-04T22:54:30","slug":"setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh","status":"publish","type":"post","link":"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/","title":{"rendered":"Setting Up FTP and SFTP on a Windows VPS: IIS FTP vs OpenSSH"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Every Windows VPS eventually needs a file transfer path: pushing a build to a staging server, pulling database backups off the box, or exchanging files with clients who will not touch a command line. On Windows Server you have two first-class options. The IIS FTP server has shipped with the OS for two decades and speaks FTPS (FTP over TLS); the OpenSSH server provides SFTP over the same SSH transport Linux admins already know. This guide sets up both and compares them so you can pick the one that fits your workflow.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The choice often comes down to your clients: if they use FileZilla or Windows Explorer-style drag-and-drop, IIS FTP with FTPS is the friendliest; if they live in a terminal or a CI\/CD pipeline, SFTP wins. Either way, <a href=\"https:\/\/windows-vps.org\/#providers\">compare Windows VPS plans on our comparison table<\/a> to see which providers let you open the ports you need without a support ticket \u2014 some budget hosts lock down inbound ports by default.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Option A \u2014 IIS FTP Server (FTPS)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Install the FTP Server role in two commands:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Install-WindowsFeature Web-FTP-Server -IncludeManagementTools\nNew-Item -Path 'C:\\inetpub\\ftproot\\public' -ItemType Directory -Force<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then configure it in IIS Manager:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open IIS Manager \u2192 your server node \u2192 FTP Firewall Support. Set the data channel port range (e.g., 50000\u201350100). This step is mandatory for passive mode through any firewall.<\/li>\n<li>Right-click Sites \u2192 Add FTP Site. Point it at C:\\inetpub\\ftproot\\public, bound to port 21.<\/li>\n<li>In FTP SSL Settings, require SSL. Windows Server can generate a self-signed certificate; use a real one if clients connect from the internet.<\/li>\n<li>Enable Basic Authentication and lock down access with FTP Authorization Rules.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Passive mode is the part that breaks most setups. FTP uses port 21 for commands and a separate port range for data transfers; open both in Windows Firewall:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>New-NetFirewallRule -DisplayName 'FTP 21' -Direction Inbound -Protocol TCP -LocalPort 21 -Action Allow\nNew-NetFirewallRule -DisplayName 'FTP Passive 50000-50100' -Direction Inbound -Protocol TCP -LocalPort 50000-50100 -Action Allow<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Option B \u2014 OpenSSH Server (SFTP)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Windows Server 2019 and later ship OpenSSH as an optional capability \u2014 no downloads, no third-party binaries:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0\nStart-Service sshd\nSet-Service -Name sshd -StartupType Automatic\nNew-NetFirewallRule -Name 'SSH 22' -DisplayName 'OpenSSH (22)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">SFTP rides on port 22, which means one firewall rule instead of three, and it works with every SFTP client \u2014 WinSCP, FileZilla, curl, and every Linux tool. Prefer SSH keys over passwords. Generate a key pair on the client, then install the public key on the server:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># On the client: ssh-keygen -t ed25519\n# On the server, for an admin user 'deploy':\nAdd-Content -Path 'C:\\ProgramData\\ssh\\administrators_authorized_keys' -Value 'ssh-ed25519 AAAA... deploy@client' -Encoding ascii\nicacls 'C:\\ProgramData\\ssh\\administrators_authorized_keys' \/inheritance:r \/grant 'SYSTEM:F' \/grant 'Administrators:F'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For non-admin users the key file is C:\\Users\\&lt;user&gt;\\.ssh\\authorized_keys. To restrict a user to SFTP only \u2014 no shell access \u2014 add this to C:\\ProgramData\\ssh\\sshd_config:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Match User deploy\n    ForceCommand internal-sftp\n    ChrootDirectory D:\\sftp\\deploy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">ChrootDirectory on Windows works per-drive, and the directory must be owned by an admin account. Verify with: sftp deploy@&lt;vps-ip&gt;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Head-to-head<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th>IIS FTP (FTPS)<\/th><th>OpenSSH (SFTP)<\/th><\/tr><\/thead><tbody><tr><td>Ports<\/td><td>21 + passive range<\/td><td>22 only<\/td><\/tr><tr><td>Encryption<\/td><td>TLS (explicit)<\/td><td>SSH<\/td><\/tr><tr><td>Key-based auth<\/td><td>No (user\/pass or IIS auth)<\/td><td>Yes \u2014 keys are standard<\/td><\/tr><tr><td>Best for<\/td><td>GUI clients, Explorer-style users<\/td><td>CI\/CD, admins, Linux interop<\/td><\/tr><tr><td>Setup effort<\/td><td>Role + firewall + passive range<\/td><td>One capability + one rule<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Which one should you pick?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run both if you like \u2014 they coexist without conflict. The pragmatic rule: if the people moving files are humans with GUI clients, give them FTPS on IIS; if the things moving files are scripts, pipelines, and Linux boxes, give them SFTP. Many teams end up with SFTP for automation and FTPS only for the occasional manual upload.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Whichever you choose, never expose plain FTP (port 21 without TLS) to the internet \u2014 credentials and files travel in cleartext, and scanners will find it within hours. Require TLS for FTPS, keys for SFTP, and restrict the firewall rules to the source IPs that actually need them. If you are still choosing between providers and want one where you can open these ports and add a data disk without friction, <a href=\"https:\/\/windows-vps.org\/#providers\">see the full specs and pricing on our comparison table<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A real-world case<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A small agency moved a client&#8217;s staging workflow from shared hosting FTP to a Windows VPS with OpenSSH. Deploys went from &#8220;zip, upload via FileZilla, pray&#8221; to a two-line CI script using sftp with key auth \u2014 while client-facing file drops still ran on IIS FTP over TLS, because their customers would not touch a terminal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A Windows VPS running both protocols costs no more than a basic plan. <a href=\"https:\/\/www.awin1.com\/cread.php?awinmid=116629&amp;awinaffid=2520403\" rel=\"noreferrer noopener sponsored\" target=\"_blank\">Database Mart Windows VPS plans<\/a> include the Windows Server license and US-based support \u2014 helpful if your provider&#8217;s firewall team needs to open that passive port range for you.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bottom line<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">FTP vs SFTP is not really a protocol debate \u2014 it is a client debate. IIS FTP with mandatory TLS covers GUI users; OpenSSH covers everything scripted. Both install in minutes with the commands above, and both beat the plain-FTP habits that still cause breaches. Set one up, test with a real client, and document the ports you opened.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Every Windows VPS eventually needs a file transfer path: pushing a build to a staging server, pulling database backups off the box, or exchanging files with clients who will not touch a command line. On Windows Server you have two first-class options. The IIS FTP server has shipped with the OS for two decades and &#8230; <a title=\"Setting Up FTP and SFTP on a Windows VPS: IIS FTP vs OpenSSH\" class=\"read-more\" href=\"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/\" aria-label=\"Read more about Setting Up FTP and SFTP on a Windows VPS: IIS FTP vs OpenSSH\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":0,"footnotes":""},"categories":[6],"tags":[],"class_list":["post-544","post","type-post","status-publish","format-standard","hentry","category-comparisons"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Setting Up FTP and SFTP on a Windows VPS: IIS FTP vs OpenSSH - Windows VPS Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Setting Up FTP and SFTP on a Windows VPS: IIS FTP vs OpenSSH\" \/>\n<meta property=\"og:description\" content=\"Setting Up FTP and SFTP on a Windows VPS: IIS FTP vs OpenSSH\" \/>\n<meta property=\"og:url\" content=\"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/\" \/>\n<meta property=\"og:site_name\" content=\"Windows VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-04T22:54:30+00:00\" \/>\n<meta name=\"author\" content=\"windows-vps\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"windows-vps\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/\",\"url\":\"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/\",\"name\":\"Setting Up FTP and SFTP on a Windows VPS: IIS FTP vs OpenSSH - Windows VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/#website\"},\"datePublished\":\"2026-08-04T22:54:30+00:00\",\"author\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58\"},\"breadcrumb\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/windows-vps.org\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Setting Up FTP and SFTP on a Windows VPS: IIS FTP vs OpenSSH\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#website\",\"url\":\"https:\/\/windows-vps.org\/blog\/\",\"name\":\"Windows VPS Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/windows-vps.org\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58\",\"name\":\"windows-vps\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g\",\"caption\":\"windows-vps\"},\"sameAs\":[\"https:\/\/windows-vps.org\/blog\"],\"url\":\"https:\/\/windows-vps.org\/blog\/author\/myxiechengxuan\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Setting Up FTP and SFTP on a Windows VPS: IIS FTP vs OpenSSH - Windows VPS Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/","og_locale":"en_US","og_type":"article","og_title":"Setting Up FTP and SFTP on a Windows VPS: IIS FTP vs OpenSSH","og_description":"Setting Up FTP and SFTP on a Windows VPS: IIS FTP vs OpenSSH","og_url":"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/","og_site_name":"Windows VPS Blog","article_published_time":"2026-08-04T22:54:30+00:00","author":"windows-vps","twitter_card":"summary_large_image","twitter_misc":{"Written by":"windows-vps","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/","url":"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/","name":"Setting Up FTP and SFTP on a Windows VPS: IIS FTP vs OpenSSH - Windows VPS Blog","isPartOf":{"@id":"https:\/\/windows-vps.org\/blog\/#website"},"datePublished":"2026-08-04T22:54:30+00:00","author":{"@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58"},"breadcrumb":{"@id":"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/windows-vps.org\/blog\/setting-up-ftp-sftp-on-windows-vps-iis-ftp-vs-openssh\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/windows-vps.org\/blog\/"},{"@type":"ListItem","position":2,"name":"Setting Up FTP and SFTP on a Windows VPS: IIS FTP vs OpenSSH"}]},{"@type":"WebSite","@id":"https:\/\/windows-vps.org\/blog\/#website","url":"https:\/\/windows-vps.org\/blog\/","name":"Windows VPS Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/windows-vps.org\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58","name":"windows-vps","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g","caption":"windows-vps"},"sameAs":["https:\/\/windows-vps.org\/blog"],"url":"https:\/\/windows-vps.org\/blog\/author\/myxiechengxuan\/"}]}},"_links":{"self":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/544","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/comments?post=544"}],"version-history":[{"count":2,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/544\/revisions"}],"predecessor-version":[{"id":547,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/544\/revisions\/547"}],"wp:attachment":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/media?parent=544"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/categories?post=544"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/tags?post=544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}