Home Assistant Community Add-on: FTP

This add-on is provided by the Home Assistant Community Add-ons project.

GitHub Release GitLab CI Project Stage Project Maintenance

Supports armhf Architecture Supports armv7 Architecture Supports aarch64 Architecture Supports amd64 Architecture Supports i386 Architecture



A secure and fast FTP server for Hassio.

The FTP protocol might become in handy sometimes. While old, it still has its use. For example, most IP Cameras still support the upload of images or videos via FTP.

This add-on provides an FTP Server for Hass.io in a reasonably secure manner. While FTP is not entirely secure by its (unencrypted) nature, this add-on supports FTP over SSL (FTPS) and jails (chroot) the virtual users in their home directories.

Of course, if you’d really want to, you could also use this add-on to gain access to your Home Assistant configuration via FTP(S).


The installation of this add-on is pretty straightforward and not different in comparison to installing any other add-on.

  1. Search for the “FTP” add-on in the add-on store and install it.
  2. Start the “FTP” add-on
  3. Check the logs of the “FTP” add-on to see if everything went well.

:books: Please read the documentation for more information about the use and configuration of this add-on.


You can always try to get support from the community here at the Home Assistant community forums, join the conversation!

Questions? You have several options to get them answered:

You could also open an issue on GitHub, in case you ran into a bug, or maybe you have an idea on improving the addon:

:information_source: At this moment our Home Assistant Community Add-ons Discord chat server and GitHub are our only official support channels. All others rely on community effort.

Repository on GitHub

Looking for more add-ons?

The primary goal of our add-ons project is to provide you (as a Home Assistant user) with additional, high quality, add-ons that allow you to take your automated home to the next level.

Check out some of our other add-ons in our Home Assistant Community Add-ons project.


About the author of this add-on

Hi there!

I am Franck Nijhof, and I have 30 years of programming experience, in many languages. I am using this experience to work on the Home Assistant project by giving back my knowledge and time to the open source community.

The add-on you are currently looking at right now was developed/packaged by me. It is not the only add-on I have created; there are many many more :wink:

However, I have a problem… I am an addict. A :coffee: addict that is. Lucky for you, I turn that C8H10N4O2 (caffeine molecule) into code (and add-ons)!

If you want to show your appreciation, consider supporting me for buying a cup of high octane wakey juice via one of the platforms below! :heart:

Sponsor Frenck via GitHub Sponsors

Support Frenck on Patreon

Enjoy your add-on, while I enjoy the brain juice. :coffee:

Thanks for all the :two_hearts:


Join our Discord server Follow me on Twitter Flollow me on Instragram Follow me on GitHub Follow me on YouTube Follow me on Twitch patreon-icon

P.S.: In case you want to ask me a question: AMA (Ask Me Anything). Most of the time I am online at the Discord chat. (I go by @Frenck in there as well).

You are very busy! Awesome job

1 Like

Wow great work. So many and nice addons and very good support. Take a break dude and chill the christmas days.

I hope you can provide an donation button. I think many people will honor your work.

Happy holidays. And great new year.:santa::christmas_tree::fireworks::sparkler:

1 Like

Thank you for these kind words and support! I will relax these days, promise. Most I’ve published these past days was created in the past month already.

:christmas_tree: Merry Christmas to you too and all the best for 2018 :fireworks:

1 Like

Hi! Have you looked into Happy Bubbles?

No, I have not yet. But let’s stay on topic here :wink:

:tada: Release v0.2.0

Full Changelog


  • Upgrades add-on base image to v1.3.2

Does this Add-on support MGET? From my trace files, it doesn’t appear to. GET works fine, but as I won’t know the name of the files I am needing to pull, I would prefer to use “MGET *” to retrieve whatever is in the directory.


:tada: Release v1.0.0

Add-on marked as stable :champagne:

Full Changelog


  • Updated add-on icon & logo
  • Upgrades add-on base image to v1.3.3

:tada: Release v1.1.0

This release is exciting, at least, for me it is. I’ve been working on this for months! And for you? Well, almost nothing changed :stuck_out_tongue:

So what did change? I’ve updated the workflows of the Community Hass.io Add-ons project. Things include:

  • Replaced CircleCI and CodeClimate. We are now using GitLab CI, backed by a couple of custom servers building and testing these add-ons.
  • All add-ons are now scanned during built and release by Clair to prevent security issues in our add-ons.
  • All add-ons are constantly scanned and monitored by Anchore.io. We will be notified immediately in case of security issues occur. (Major thanks to Anchore.io for helping us out!)
  • The add-ons repository is now entirely generated and automatically synced with all the add-ons. This ensures repositories are in sync, never forgotten and releases are almost instantly.
  • The base images that these add-ons are built on are entirely revised.
  • All add-ons have been updated to follow the Docker best practices. These are checked on every code change by GitLab CI.
  • All add-ons had maintenance. All software is updated to the latest and greatest and the documentation has been revisited.
  • There are now 2 bots in place on the GitHub project. The Add-ons Assistant is helping us out with the GitHub issues and pull requests and the AddonsBot is fully active taking care of updating code across the different GitHub Repositories.
  • We now have Edge & Beta add-ons repositories available. This allows everybody to test the latest and greatest (in case you don’t care about stability that much, or just wanna help out!)
  • I’ve removed all the PayPal, Bitcoin, … buttons. If you’d like to show your appreciation, then please, just buy me a coffee.

So that’s quite a lot, right? So what changed in this specific add-on?

Full Changelog


  • Adds .yamllint configuration
  • Adds all architectures to add-on config
  • Adds Probot configuration
  • Adds initial add-on README template
  • Adds Gitlab CI


  • Fixes Markdownlint warning in License
  • Fixes hadolint warnings


  • Replaces Changelog with GitHub releases
  • Upgrades add-on base image to v1.4.1
  • Updates README
  • Fixes apparmor issues on mounting resources


  • Removes CodeClimate
  • Removes CircleCI
  • Removes supervisor version constraint from add-on config

:tada: Release v1.2.0

Full Changelog


  • Fixes jsonlint issue


  • Moves build-env to latest
  • Upgrades base image to v1.4.2
  • Rewrites GitLab CI
  • Upgrades base image in GitLab CI to 1.4.2

I’ve been at this a week or so and just can’t seem to get it to work. In the browser I can get it to give me a login form where I can enter the username and password I set in the addon page. It then denies me.

using ftp in atom text editor I see it cycle through status messages then at the end it gives me:

< 227 entering passive mode
then says connection closed.

I’ve forwarded port 21
I’m using duckdns with letsencrypt. Is it necessary to change ssl from false to true in the FTP addon page? Because when I do that it wont give me a login form or anything, just says refused.

i’m not sure what else to try.
I’ve replaced my ip with in the log below, and the pi ip address to near the end of the log where it mentions entering passive mode. I set the log level to trace.

Sat Jul 14 00:40:46 2018 [pid 2] CONNECT: Client ""
Sat Jul 14 00:40:46 2018 [pid 2] FTP response: Client "", "220 Welcome to the Hass.io FTP service."
Sat Jul 14 00:40:46 2018 [pid 2] FTP command: Client "", "USER hassio"
Sat Jul 14 00:40:46 2018 [pid 2] [hassio] FTP response: Client "", "331 Please specify the password."
Sat Jul 14 00:40:46 2018 [pid 2] [hassio] FTP command: Client "", "PASS <password>"
Sat Jul 14 00:40:46 2018 [pid 1] [hassio] OK LOGIN: Client ""
Sat Jul 14 00:40:46 2018 [pid 3] [hassio] FTP response: Client "", "230 Login successful."
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP command: Client "", "FEAT"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP response: Client "", "211-Features:"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP response: Client "", " EPRT??"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP response: Client "", " EPSV??"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP response: Client "", " MDTM??"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP response: Client "", " PASV??"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP response: Client "", " REST STREAM??"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP response: Client "", " SIZE??"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP response: Client "", " TVFS??"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP response: Client "", " UTF8??"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP response: Client "", "211 End"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP command: Client "", "OPTS UTF8 ON"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP response: Client "", "200 Always in UTF8 mode."
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP command: Client "", "TYPE I"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP response: Client "", "200 Switching to Binary mode."
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP command: Client "", "SITE LISTFMT 1"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP response: Client "", "500 Unknown SITE command."
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP command: Client "", "PASV"
Sat Jul 14 00:40:47 2018 [pid 3] [hassio] FTP response: Client "", "227 Entering Passive Mode (111,111,111,111,117,57)."
Sat Jul 14 00:40:57 2018 [pid 3] [hassio] FTP command: Client "", "NOOP"
Sat Jul 14 00:40:57 2018 [pid 3] [hassio] FTP response: Client "", "200 NOOP ok."

:tada: Release v1.3.0

Full Changelog


  • Fixes hadolint warnings


  • Upgrades base image to v2.0.0
  • Upgrades gcc to 6.4.0-r8
  • Upgrades make to 4.2.1-r2
  • Upgrades musl-dev to 1.1.19-r10
  • Upgrades openssl to 1.0.2o-r1
  • Upgrades vsftpd to 3.0.3-r5
  • Upgrades base image to v2.0.1

Do you know why it allows me to enter a password when connecting then either says “entering passive mode” or “entering extended passive mode” what’s the issue when getting that? it then says “QUIT” and “goodbye” in the logs.

I think i’m just done trying I’ve been at this awhile. Sometimes It just keeps showing a login dialog then when the correct username and password are entered it shows it again and again. No amount of config changes help or allow me in. thanks though.

:tada: Release v1.4.0

This release adds password checks against the HaveIBeenPwned password database and now supports the use of your Home Assistant secrets file!

So you can now use !secret ftp_password as your password and the add-on will fetch the actual password from your secrets file.

Full Changelog


  • Adds support for HaveIBeenPwned password checks
  • Documents secrets support


  • Upgrades openssl to 1.0.2o-r2
  • Upgrades hadolint to latest
  • Upgrades base image to v2.1.1
  • Sets default Shell to Bash
  • Updates README

Questions? Join our Discord server! https://discord.me/hassioaddons
Enjoying my add-ons? Consider supporting my work: https://patreon.com/frenck

I updated to 1.4.0 and now the ftp server does not start automatically anymore. And also if it starts it wont work :). I did not change anything to the configuration.

Please check the error logs.

This is the log i see at the addon. But the ftp server is not accessible

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 00-banner.sh: executing... 
 Hass.io Add-on: FTP v1.4.0
 A secure and fast FTP server for Hass.io
 From: Community Hass.io Add-ons
 By: Franck Nijhof <[email protected]>
 armhf / HassOS 1.9 / HA 0.76.0 / SU 126 / stable
[cont-init.d] 00-banner.sh: exited 0.
[cont-init.d] 01-log-level.sh: executing... 
Log level is set to INFO
[cont-init.d] 01-log-level.sh: exited 0.
[cont-init.d] 02-updates.sh: executing... 
INFO: You are running the latest version of this add-on
[cont-init.d] 02-updates.sh: exited 0.
[cont-init.d] 10-requirements.sh: executing... 
[cont-init.d] 10-requirements.sh: exited 0.
[cont-init.d] 50-vsftpd.sh: executing... 
[cont-init.d] 50-vsftpd.sh: exited 0.
[cont-init.d] 51-users.sh: executing... 
WARNING: Password is in the Have I Been Pwned database!
WARNING: Password appeared 64030 times!
FATAL: Please choose a different pass for hassio, this one is unsafe!
[cont-init.d] 51-users.sh: exited 1.
[cont-finish.d] executing container finish scripts...
[cont-finish.d] 99-message.sh: executing... 
 v1.4.0 / armhf[cont-finish.d] 99-message.sh: exited 99.
s6-maximumtime: warning: unable to wait for child process: Operation timed out
[cont-finish.d] done.
[s6-finish] syncing disks.
[s6-finish] sending all processes the TERM signal.

hmm, i changed my password to a more secure password and it worked. Quite strange that the program sees a weak password as a fatal exception. I only have the server on my internal network.

1 Like