Lyo.Sftp.Client
1.0.3
See the version list below for details.
dotnet add package Lyo.Sftp.Client --version 1.0.3
NuGet\Install-Package Lyo.Sftp.Client -Version 1.0.3
<PackageReference Include="Lyo.Sftp.Client" Version="1.0.3" />
<PackageVersion Include="Lyo.Sftp.Client" Version="1.0.3" />
<PackageReference Include="Lyo.Sftp.Client" />
paket add Lyo.Sftp.Client --version 1.0.3
#r "nuget: Lyo.Sftp.Client, 1.0.3"
#:package Lyo.Sftp.Client@1.0.3
#addin nuget:?package=Lyo.Sftp.Client&version=1.0.3
#tool nuget:?package=Lyo.Sftp.Client&version=1.0.3
Lyo.Sftp.Client
Thin SFTP wrapper over SSH.NET for Lyo hosts and storage adapters (Lyo.IO.Temp.Sftp, Lyo.FileStorage.Sftp). Canonical APIs are *Async (Task + CancellationToken) backed by SSH.NET async methods and await-safe pool/per-client gates. Sync methods remain as thin blockers. Provides connection pooling with leases, POSIX path jail via Lyo.Common.Pathing.PathHelpers, host-key allow lists, optional password/private-key auth, ILogger diagnostics, and sftp.* metrics. Thread-safe for concurrent callers up to MaxPooledClients; do not share one leased Stream across threads.
Features
- Async-first — prefer
*Asyncfrom hosts/adapters; sync wrappers block on the async implementation (noTask.Run). - Pooled leases —
MaxPooledClientsconcurrent SSH.NET clients; per-clientSemaphoreSlimserializes ops across awaits. - Thread-safe callers — concurrent use is supported and capped by the pool; one leased stream is not multi-thread safe.
- Path jail — all paths resolve under
RootRemoteDirectorywithPathStyle.Posix. - Auth — password and/or PEM / key-file private key; host-key fingerprint allow list (or
AcceptAnyfor tests). - Observability —
ILogger+IMetrics(sftp.connect,sftp.operation,sftp.bytes,sftp.pool,sftp.errors);EnableMetricsopt-out usesNullMetrics. - DI —
AddSftpClient/AddSftpClientFromConfiguration.
Examples
Registration
services.AddSftpClient(o =>
{
o.Host = "sftp.example.com";
o.Username = "lyo";
o.Password = secret;
o.RootRemoteDirectory = "/data/lyo";
o.HostKeyPolicy = SftpHostKeyPolicy.FingerprintAllowList;
o.AllowedHostKeyFingerprints.Add("SHA256:...");
});
Async upload / download
await client.UploadAsync("report.bin", bytes, ct);
var copy = await client.DownloadBytesAsync("report.bin", ct);
Dependencies
Generated from ProjectReference / PackageReference (same model as docs/Lyo.ProjectGraph.html).
Lyo.Common— (direct, lyo)Lyo.Exceptions— (direct, lyo)Lyo.Metrics— (direct, lyo)Microsoft.Extensions.Configuration.Binder10.0.5— (direct, microsoft)Microsoft.Extensions.DependencyInjection.Abstractions10.0.5— (direct, microsoft)Microsoft.Extensions.Logging.Abstractions10.0.5— (direct, microsoft)SSH.NET2025.1.0— (direct, third-party)Microsoft.Extensions.Options.ConfigurationExtensions10.0.5— (transitive, microsoft)System.Memory4.6.3— (transitive, microsoft, netstandard2.0)System.Text.Json10.0.5— (transitive, microsoft, netstandard2.0)
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Lyo.Common (>= 1.0.3)
- Lyo.Exceptions (>= 1.0.3)
- Lyo.Metrics (>= 1.0.3)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.5)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.5)
- SSH.NET (>= 2025.1.0)
-
net10.0
- Lyo.Common (>= 1.0.3)
- Lyo.Exceptions (>= 1.0.3)
- Lyo.Metrics (>= 1.0.3)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.5)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.5)
- SSH.NET (>= 2025.1.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Lyo.Sftp.Client:
| Package | Downloads |
|---|---|
|
Lyo.FileStorage.Sftp
SFTP-backed IFileStorageService using Lyo.Sftp.Client (physical IO only; no multipart/presign in v1). |
|
|
Lyo.IO.Temp.Sftp
SFTP-backed IIOTempStorageProvider using Lyo.Sftp.Client. |
GitHub repositories
This package is not used by any popular GitHub repositories.