2 Commits

Author SHA1 Message Date
veeso
205d2813ad perf: Migrated to libssh.org on Linux and MacOS for better ssh agent support.
Some checks failed
Linux / build (push) Has been cancelled
MacOS / build (push) Has been cancelled
Windows / build (push) Has been cancelled
closes #337
2025-09-20 18:13:20 +02:00
veeso
86660a0cc9 fix: SMB support for MacOS with vendored build of libsmbclient.
closes #334
2025-09-20 18:07:26 +02:00
7 changed files with 94 additions and 10 deletions

View File

@@ -29,8 +29,45 @@ jobs:
with: with:
toolchain: stable toolchain: stable
targets: ${{ matrix.platform.target }} targets: ${{ matrix.platform.target }}
- name: Install dependencies
run: |
brew update
brew install \
bison \
cpanminus \
cups \
flex \
gettext \
gmp \
gnutls \
icu4c \
jansson \
libarchive \
libbsd \
libunistring \
libgit2 \
libtirpc \
openldap \
pkg-config \
zlib
brew link --force bison
brew link --force cups
brew link --force flex
brew link --force gettext
brew link --force gmp
brew link --force gnutls
brew link --force icu4c
brew link --force jansson
brew link --force libarchive
brew link --force libbsd
brew link --force libgit2
brew link --force libtirpc
brew link --force libunistring
brew link --force openldap
brew link --force zlib
cpanm Parse::Yapp::Driver
- name: Build release - name: Build release
run: cargo build --release --target ${{ matrix.platform.target }} run: cargo build --release --features smb-vendored --target ${{ matrix.platform.target }}
- name: Prepare artifact files - name: Prepare artifact files
run: | run: |
mkdir -p .artifact mkdir -p .artifact

View File

@@ -22,6 +22,13 @@ jobs:
with: with:
toolchain: stable toolchain: stable
components: rustfmt, clippy components: rustfmt, clippy
- name: Install dependencies
run: |
brew update
brew install \
pkg-config \
samba
brew link --force samba
- name: Build - name: Build
run: cargo build run: cargo build
- name: Run tests - name: Run tests

View File

@@ -1,6 +1,7 @@
# Changelog # Changelog
- [Changelog](#changelog) - [Changelog](#changelog)
- [0.19.0](#0190)
- [0.18.0](#0180) - [0.18.0](#0180)
- [0.17.0](#0170) - [0.17.0](#0170)
- [0.16.1](#0161) - [0.16.1](#0161)
@@ -41,6 +42,14 @@
--- ---
## 0.19.0
Released on 20/09/2025
- [Issue 356](https://github.com/veeso/termscp/issues/356): Fixed SSH auth issue not trying with the password if any RSA key was found.
- [Issue 334](https://github.com/veeso/termscp/issues/334): SMB support for MacOS with vendored build of libsmbclient.
- [Issue 337](https://github.com/veeso/termscp/issues/337): Migrated to libssh.org on Linux and MacOS for better ssh agent support.
## 0.18.0 ## 0.18.0
Released on 10/06/2025 Released on 10/06/2025

26
Cargo.lock generated
View File

@@ -2574,6 +2574,31 @@ dependencies = [
"redox_syscall", "redox_syscall",
] ]
[[package]]
name = "libssh-rs"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3066e110d6bb95a5addbd9c2ee595efdaeecaddd4793f3803dfee2968a74c685"
dependencies = [
"bitflags 1.3.2",
"libc",
"libssh-rs-sys",
"openssl-sys",
"thiserror 1.0.69",
]
[[package]]
name = "libssh-rs-sys"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01d528ea9ac190fa364ff12193da82222dfc645e7ab28666ae91493bd288a1a0"
dependencies = [
"cc",
"libz-sys",
"openssl-sys",
"pkg-config",
]
[[package]] [[package]]
name = "libssh2-sys" name = "libssh2-sys"
version = "0.3.1" version = "0.3.1"
@@ -3608,6 +3633,7 @@ checksum = "d29de4702886ae0e4433904d4f6f9b2ed2961d31d76a7e7bef58305097238eb6"
dependencies = [ dependencies = [
"chrono", "chrono",
"lazy-regex", "lazy-regex",
"libssh-rs",
"log", "log",
"path-slash", "path-slash",
"remotefs", "remotefs",

View File

@@ -60,6 +60,7 @@ regex = "^1"
remotefs = "^0.3" remotefs = "^0.3"
remotefs-aws-s3 = "0.4" remotefs-aws-s3 = "0.4"
remotefs-kube = "0.4" remotefs-kube = "0.4"
remotefs-smb = { version = "^0.3", optional = true }
remotefs-webdav = "^0.2" remotefs-webdav = "^0.2"
rpassword = "^7" rpassword = "^7"
self_update = { version = "^0.42", default-features = false, features = [ self_update = { version = "^0.42", default-features = false, features = [
@@ -84,15 +85,15 @@ version-compare = "^0.2"
whoami = "^1.6" whoami = "^1.6"
wildmatch = "^2" wildmatch = "^2"
[target."cfg(not(target_os = \"macos\"))".dependencies]
remotefs-smb = { version = "^0.3", optional = true }
[target."cfg(target_family = \"unix\")".dependencies] [target."cfg(target_family = \"unix\")".dependencies]
remotefs-ftp = { version = "^0.3", features = [ remotefs-ftp = { version = "^0.3", features = [
"native-tls-vendored", "native-tls-vendored",
"native-tls", "native-tls",
] } ] }
remotefs-ssh = { version = "^0.7", features = ["libssh2-vendored"] } remotefs-ssh = { version = "^0.7", default-features = false, features = [
"find",
"libssh-vendored",
] }
uzers = "0.12" uzers = "0.12"
[target."cfg(target_family = \"windows\")".dependencies] [target."cfg(target_family = \"windows\")".dependencies]

View File

@@ -10,8 +10,8 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
posix: { target_family = "unix" }, posix: { target_family = "unix" },
win: { target_family = "windows" }, win: { target_family = "windows" },
// exclusive features // exclusive features
smb: { all(feature = "smb", not( macos )) }, smb: { feature = "smb" },
smb_unix: { all(unix, feature = "smb", not(macos)) }, smb_unix: { all(unix, feature = "smb") },
smb_windows: { all(windows, feature = "smb") } smb_windows: { all(windows, feature = "smb") }
} }

View File

@@ -13,7 +13,11 @@ use remotefs_kube::KubeMultiPodFs as KubeFs;
use remotefs_smb::SmbOptions; use remotefs_smb::SmbOptions;
#[cfg(smb)] #[cfg(smb)]
use remotefs_smb::{SmbCredentials, SmbFs}; use remotefs_smb::{SmbCredentials, SmbFs};
use remotefs_ssh::{LibSsh2Session, ScpFs, SftpFs, SshAgentIdentity, SshConfigParseRule, SshOpts}; #[cfg(windows)]
use remotefs_ssh::LibSsh2Session as SshSession;
#[cfg(unix)]
use remotefs_ssh::LibSshSession as SshSession;
use remotefs_ssh::{ScpFs, SftpFs, SshAgentIdentity, SshConfigParseRule, SshOpts};
use remotefs_webdav::WebDAVFs; use remotefs_webdav::WebDAVFs;
#[cfg(not(smb))] #[cfg(not(smb))]
@@ -141,7 +145,7 @@ impl RemoteFsBuilder {
fn scp_client( fn scp_client(
params: GenericProtocolParams, params: GenericProtocolParams,
config_client: &ConfigClient, config_client: &ConfigClient,
) -> ScpFs<LibSsh2Session> { ) -> ScpFs<SshSession> {
Self::build_ssh_opts(params, config_client).into() Self::build_ssh_opts(params, config_client).into()
} }
@@ -149,7 +153,7 @@ impl RemoteFsBuilder {
fn sftp_client( fn sftp_client(
params: GenericProtocolParams, params: GenericProtocolParams,
config_client: &ConfigClient, config_client: &ConfigClient,
) -> SftpFs<LibSsh2Session> { ) -> SftpFs<SshSession> {
Self::build_ssh_opts(params, config_client).into() Self::build_ssh_opts(params, config_client).into()
} }