sftpman
is a command line application for Linux systems that makes it easy to setup and mount sshfs/SFTP filesystems.
Configuration data is stored as JSON files in $XDG_CONFIG_HOME/sftpman
(see the XDG Base Directory Specification) or $HOME/sftpman
.
Under the hood, sshfs is used to do all the filesystem mounting work.
Filesystems are mounted locally under the /mnt/sshfs/
directory by default (e.g. /mnt/sshfs/my-fs
), but custom mount endpoints are also supported.
There's also a companion 🖥️ GUI application - sftpman-iced.
💡 Note: sftpman used to be written in Python (see sftpman-python) and had an sftman-gtk GUI frontend (also written in Python). Since this Rust rewrite appeared, the old Python-based applications are no longer maintained.
For ArchLinux, there's an sftpman package in the AUR.
For other Linux distributions you can install using cargo:
cargo install sftpman
You also need to:
-
install sshfs yourself
-
make sure the
/mnt/sshfs
directory exists and is writable (e.g.mkdir /mnt/sshfs && chown root:users /mnt/sshfs && chmod 0775 /mnt/sshfs
)
Once you've 🚀 installed the CLI application, you can:
- check if your system satisfies the prerequisites by running:
sftpman preflight_check
- manage filesystems via commands like:
sftpman create
,sftpman update
andsftpman rm
, etc. - mount filesystems via commands like:
sftpman mount my-fs-1 my-fs-2
orsftpman mount_all
- unmount filesystems via commands like:
sftpman umount my-fs my-fs-2
orsftpman umount_all
- list filesystems via commands like:
sftpman ls available
,sftman ls mounted
orsftpman ls unmounted
See sftpman --help
for more information.
sftpman-iced is a frontend for sftpman built with the iced UI library.
💡 Note: Installing the GUI application will automatically pull the library provided here (libsftpman
) as a dependency, but will not automatically install the sftpman
CLI binary.
You certainly can use sshfs directly or wrap it in your own scripts.
sftpman
aims to be a higher-level wrapper around sshfs
, so you don't have to do such manual work.
Having a 🖥️ GUI application also makes things easier.
This has been discussed in this old issue.
As should be evident from the project name (sftpman
), only SFTP is being targeted.
Other protocols are out of scope for this project.
The Python version of sftpman has worked well for more than a decade (2011-2025), but:
-
packaging Python application is somewhat annoying. Major Python version upgrades change the
site-packages
path and necessitate a rebuild. -
Rust is very suitable for systems programs (like
sftpman
). The code is much cleaner and more reliable.
sftpman
v2 (and the 🖥️ GUI application - sftpman-iced) are still mostly-backward compatible with the old Python-based sftpman
software (sftpman-python and the associated sftman-gtk):
-
✅ The old configuration files can be read and used as-is
-
✅ Most CLI commands are the same
-
✨ You can now use custom local mount endpoints for filesystems, instead of just the default
/mnt/sshfs/{id}
directory -
❌ Some CLI commands for
sftpman
and their options have different names (sftpman setup
being replaced bysftpman create
andsftpman update
;--auth_method
being replaced by--auth_type
)