Summary 💡
A built-in transport that allows to manually configure an SSH connection without the need for the ssh program.
Candidates for the ssh part are:
russh - Rust
- even with limited support for
ssh-agent, which makes it something I'd seriously look at
ssh2 - Rust bindings to libssh2
libssh2 - C library
- used by
libgit2
- desirable license, but different feature set, maybe less mature than
libssh
libssh - C library
- Maybe more mature than
libssh2, but has undesirable license
Motivation 🔦
Cargo should be standalone, and right now it needs the ssh-program to clone ssh:// URLs. Even though this is beneficial on Linux, it's usually not very portable and often won't work at all on Windows. git2 has ssh support built-in using libssh which works, but has a less desirable license than libssh2.
References
Suggestions
- Try to add an actual test using the existing ssh transport to create a connection to a local (and controlled) ssh daemon. This could be very useful when testing a new implementation.
Requirement
- Needs a feature toggle, and added dependencies are optional (but pulled in by the feature)
Summary 💡
A built-in transport that allows to manually configure an SSH connection without the need for the
sshprogram.Candidates for the
sshpart are:russh- Rustssh-agent, which makes it something I'd seriously look atssh2- Rust bindings tolibssh2libssh2- C librarylibgit2libsshlibssh- C librarylibssh2, but has undesirable licenseMotivation 🔦
Cargo should be standalone, and right now it needs the
ssh-program to clonessh://URLs. Even though this is beneficial on Linux, it's usually not very portable and often won't work at all on Windows.git2hassshsupport built-in usinglibsshwhich works, but has a less desirable license thanlibssh2.References
enumgit2ssh configuration options, which is whatcargocaters to and is implemented with.sync(or async if needed) version of theTransporttraitsshprogram, along with the the git-upload-pack invocationSuggestions
Requirement