Skip to main content

SSH Filesystem -- Async SSH/SFTP backend for fsspec

Project description

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 messsage!')
...

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 messsage!'

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')]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sshfs-2024.9.0.tar.gz (24.4 kB view details)

Uploaded Source

Built Distribution

sshfs-2024.9.0-py3-none-any.whl (16.1 kB view details)

Uploaded Python 3

File details

Details for the file sshfs-2024.9.0.tar.gz.

File metadata

  • Download URL: sshfs-2024.9.0.tar.gz
  • Upload date:
  • Size: 24.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for sshfs-2024.9.0.tar.gz
Algorithm Hash digest
SHA256 53589de34083f7f59203473526d80d9b1692267c37bf51f007d589660feaf458
MD5 fa8b3d33f417180cc95808bf29b17e17
BLAKE2b-256 c88d4ea67c38d2884effaf2874d76ffe6a790ef9998a383a52e920dec966c230

See more details on using hashes here.

File details

Details for the file sshfs-2024.9.0-py3-none-any.whl.

File metadata

  • Download URL: sshfs-2024.9.0-py3-none-any.whl
  • Upload date:
  • Size: 16.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for sshfs-2024.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bc3f4bd33b20b3e5fd8fbbf640d0b87d8a9531ff8e94a7beb8778d3853b07053
MD5 fff22a45485591b011b648b4e77d3355
BLAKE2b-256 458e37dd27592090d6894fa2bb2d065a7290d48a2fa8ab608fe07a96929deb6e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page