SshSharp.Extensions.DependencyInjection
1.1.0
dotnet add package SshSharp.Extensions.DependencyInjection --version 1.1.0
NuGet\Install-Package SshSharp.Extensions.DependencyInjection -Version 1.1.0
<PackageReference Include="SshSharp.Extensions.DependencyInjection" Version="1.1.0" />
<PackageVersion Include="SshSharp.Extensions.DependencyInjection" Version="1.1.0" />
<PackageReference Include="SshSharp.Extensions.DependencyInjection" />
paket add SshSharp.Extensions.DependencyInjection --version 1.1.0
#r "nuget: SshSharp.Extensions.DependencyInjection, 1.1.0"
#:package SshSharp.Extensions.DependencyInjection@1.1.0
#addin nuget:?package=SshSharp.Extensions.DependencyInjection&version=1.1.0
#tool nuget:?package=SshSharp.Extensions.DependencyInjection&version=1.1.0
SshSharp.Extensions.DependencyInjection
Dependency injection for SshSharp: named SSH endpoints from configuration, a factory for new connections, a shared connection that is opened again when it drops, and a health check.
builder.Services.AddSshClient("deploy").BindConfiguration("Ssh:Deploy").ValidateOnStart();
builder.Services.AddHealthChecks().AddSsh("deploy");
// A new connection the caller owns:
await using var client = await clientFactory.ConnectAsync("deploy", cancellationToken);
// The shared one, which the provider owns and reconnects:
var shared = await connections.GetClientAsync("deploy", cancellationToken);
// An SFTP session on the shared connection, which the caller owns (also the session factory of SftpFileProvider and SftpFileSystem):
await using var sftp = await connections.OpenSftpAsync("deploy", cancellationToken);
// The endpoint as a keyed service, an HttpClient through it, and its connection's changes:
public sealed class Backups([FromKeyedServices("deploy")] ISshEndpoint deploy) { /* deploy.GetClientAsync(ct) ... */ }
builder.Services.AddHttpClient("internal-api").UseSshTunnel("deploy");
await foreach (var change in connections.WatchAsync("deploy", cancellationToken)) { /* Connected, Disconnected, Reconnected */ }
Unknown hosts fail by default (AcceptNewHostKeys opts in to recording them). In containers, pin the server's host key with
HostKeyFingerprints (fingerprints or .pub lines) and give private keys as values with PrivateKeys (for example
Ssh__Deploy__PrivateKeys__0__Key from a secret), with no files in ~/.ssh. Bastions are settings too (JumpHosts, each with its
own user, keys and pins), and UseAgent offers the SSH agent's keys. See the
dependency injection guide.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. 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. |
-
net10.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Diagnostics.HealthChecks (>= 10.0.12)
- Microsoft.Extensions.Http (>= 10.0.12)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Options (>= 10.0.12)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.12)
- SshSharp (>= 1.1.0)
-
net8.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.0)
- Microsoft.Extensions.Diagnostics.HealthChecks (>= 8.0.0)
- Microsoft.Extensions.Http (>= 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.0)
- Microsoft.Extensions.Options (>= 8.0.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 8.0.0)
- SshSharp (>= 1.1.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.