Changelog · Get started · Documentation
~ Remotefs SSH client ~
Developed by @veeso
Current version: 0.7.0 (01/09/2025)
remotefs-ssh is a client implementation for remotefs, providing support for the SFTP/SCP protocol.
First of all, add remotefs-ssh
to your project dependencies:
remotefs = "0.3"
remotefs-ssh = "^0.7"
Note
The library supports multiple ssh backends.
Currently libssh2
and libssh
are supported.
By default the library is using libssh2
.
Each backend can be set as a feature in your Cargo.toml
. Multiple backends can be enabled at the same time.
libssh2
: The default backend, using thelibssh2
library for SSH connections.libssh
: An alternative backend, using thelibssh
library for SSH connections.
Each backend can be built with the vendored version, using the vendored feature instead:
libssh2-vendored
: Build thelibssh2
backend with the vendored version of the library.libssh-vendored
: Build thelibssh
backend with the vendored version of the library.
If the vendored feature is NOT provided, you will need to have the corresponding system libraries installed on your machine.
Note
If you need SftpFs to be Sync
YOU MUST use libssh2.
these features are supported:
find
: enablefind()
method on client (enabled by default)no-log
: disable logging. By default, this library will log via thelog
crate.
Here is a basic usage example, with the Sftp
client, which is very similiar to the Scp
client.
Both the SftpFs
and ScpFs
constructors are respectively SftpFs::libssh2
and SftpFs::libssh
accordingly to the enabled backends.
// import remotefs trait and client
use remotefs::RemoteFs;
use remotefs_ssh::{SshConfigParseRule, SftpFs, SshOpts};
use std::path::Path;
let opts = SshOpts::new("127.0.0.1")
.port(22)
.username("test")
.password("password")
.config_file(Path::new("/home/cvisintin/.ssh/config"), ParseRule::STRICT);
let mut client = SftpFs::libssh2(opts);
// connect
assert!(client.connect().is_ok());
// get working directory
println!("Wrkdir: {}", client.pwd().ok().unwrap().display());
// change working directory
assert!(client.change_dir(Path::new("/tmp")).is_ok());
// disconnect
assert!(client.disconnect().is_ok());
The following table states the compatibility for the client client and the remote file system trait method.
Note: connect()
, disconnect()
and is_connected()
MUST always be supported, and are so omitted in the table.
Client/Method | Scp | Sftp |
---|---|---|
append_file | No | Yes |
append | No | Yes |
change_dir | Yes | Yes |
copy | Yes | Yes |
create_dir | Yes | Yes |
create_file | Yes | Yes |
create | Yes | Yes |
exec | Yes | Yes |
exists | Yes | Yes |
list_dir | Yes | Yes |
mov | Yes | Yes |
open_file | Yes | Yes |
open | Yes | Yes |
pwd | Yes | Yes |
remove_dir_all | Yes | Yes |
remove_dir | Yes | Yes |
remove_file | Yes | Yes |
setstat | Yes | Yes |
stat | Yes | Yes |
symlink | Yes | Yes |
If you like remotefs-ssh and you're grateful for the work I've done, please consider a little donation 🥳
You can make a donation with one of these platforms:
Contributions, bug reports, new features, and questions are welcome! 😉 If you have any questions or concerns, or you want to suggest a new feature, or you want just want to improve remotefs, feel free to open an issue or a PR.
Please follow our contributing guidelines
View remotefs-ssh changelog HERE
remotefs-ssh is powered by these aweseome projects:
remotefs-ssh is licensed under the MIT license.
You can read the entire license HERE