sshfs
sshfs is an implementation of fsspec for the SFTP protocol using asyncssh.
Features
- A complete implementation of the fsspec protocol through SFTP
- Supports features outside of the SFTP (e.g server side copy through SSH command execution)
- Quite fast (compared to alternatives like paramiko)
- Builtin Channel Management
- Async! (thanks to
asyncssh)
Tutorial
Install the sshfs from PyPI or the conda-forge. This will install fsspec
and register sshfs for ssh:// urls, so you can open files using:
from fsspec import open
with open('ssh://[user@]host[:port]/path/to/file', "w") as file:
file.write("Hello World!")
with open('ssh://[user@]host[:port]/path/to/file', "r") as file:
print(file.read())
For more operations, you can use the SSHFileSystem class directly:
from sshfs import SSHFileSystem
To connect with a password, you can simply specify username/password
as keyword arguments and connect to the host of your choosing;
# Connect with a password
fs = SSHFileSystem(
'127.0.0.1',
username='sam',
password='fishing'
)
If you want to use a private key to authenticate, you can either pass a string pointing to the path of the key, or give a list of them to be tried:
# or with a private key
fs = SSHFileSystem(
'ssh.example.com',
client_keys=['/path/to/ssh/key']
)
Note: you can also pass client_keys as an argument to fsspec.open.
All operations and their descriptions are specified here.
Here are a few example calls you can make, starting with info() which allows you to retrieve the metadata about given path;
>>> details = fs.info('/tmp')
>>> print(f'{details["name"]!r} is a {details["type"]}!')
'/tmp/' is a directory!
>>>
>>> crontab = fs.info('/etc/crontab')
>>> print(f'{crontab["name"]!r} is a {crontab["type"]}!')
'/etc/crontab' is a file!
You can also create new files through either putting a local file with put_file or opening a file in write mode;
>>> with fs.open('/tmp/message.dat', 'wb') as stream:
... stream.write(b'super secret message!')
...
And either download it through get_file or simply read it on the fly with opening it;
>>> with fs.open('/tmp/message.dat') as stream:
... print(stream.read())
...
b'super secret message!'
There are also a lot of other basic filesystem operations, such as mkdir, touch and find;
>>> fs.mkdir('/tmp/dir')
>>> fs.mkdir('/tmp/dir/eggs')
>>> fs.touch('/tmp/dir/spam')
>>> fs.touch('/tmp/dir/eggs/quux')
>>>
>>> for file in fs.find('/tmp/dir'):
... print(file)
...
/tmp/dir/eggs/quux
/tmp/dir/spam
If you want to list a directory but not it's children, you can use ls();
>>> [(detail['name'], detail['type']) for detail in fs.ls('/tmp/dir', detail=True)]
[('/tmp/dir/spam', 'file'), ('/tmp/dir/eggs', 'directory')]
Metadata
Release files for sshfs 2026.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| sshfs-2026.8.0.tar.gz | 27.9 kB | Without provenance | Details for sshfs-2026.8.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| sshfs-2026.8.0-py3-none-any.whl | Python 3 | none | any | Details for sshfs-2026.8.0-py3-none-any.whl |
Total release size: 45.1 kB
Release files / sshfs-2026.8.0.tar.gz
| Download URL | sshfs-2026.8.0.tar.gz |
|---|---|
| Size | 27.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1a52db45dce437c62d4a47cb8b4f72bc230300acda536a6d3bac984795262917
|
|
BLAKE2b-256 checksum How to use checksums |
b2700f5b8a8b2ba771102fe24f01436626f77d906f3c8338e40e02466a5bee08
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / sshfs-2026.8.0-py3-none-any.whl
| Download URL | sshfs-2026.8.0-py3-none-any.whl |
|---|---|
| Size | 17.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1c088ac1dde6a416673addb8451ade4a4c4084b0d8a1c236e51ad552c0e1a40f
|
|
BLAKE2b-256 checksum How to use checksums |
ad99a8e4260ab8113bdcdf43961855f25c6c4525fa22fa18e91e9bce6085fddc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for sshfs 2026.8.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.