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 | |
|---|---|---|---|
| sshfs-2026.8.0.tar.gz | 27.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sshfs-2026.8.0-py3-none-any.whl | Python 3 | none | any | Details |
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
|