SshSharp.FileProviders
1.1.0
dotnet add package SshSharp.FileProviders --version 1.1.0
NuGet\Install-Package SshSharp.FileProviders -Version 1.1.0
<PackageReference Include="SshSharp.FileProviders" Version="1.1.0" />
<PackageVersion Include="SshSharp.FileProviders" Version="1.1.0" />
<PackageReference Include="SshSharp.FileProviders" />
paket add SshSharp.FileProviders --version 1.1.0
#r "nuget: SshSharp.FileProviders, 1.1.0"
#:package SshSharp.FileProviders@1.1.0
#addin nuget:?package=SshSharp.FileProviders&version=1.1.0
#tool nuget:?package=SshSharp.FileProviders&version=1.1.0
SshSharp.FileProviders
An IFileProvider over SFTP, built on SshSharp: serve the files under a directory on an
SSH server to ASP.NET Core static files, Razor views, configuration, and anything else that reads through
Microsoft.Extensions.FileProviders. Nothing is mounted, so only your application sees the files.
using SshSharp;
using SshSharp.FileProviders;
using SshSharp.Sftp;
var ssh = await SshClient.ConnectAsync("deploy@assets.example.com");
var sftp = await ssh.OpenSftpAsync();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new SftpFileProvider(sftp, "/srv/www"),
});
To keep serving after the connection drops, give the provider a session factory instead of one session: it opens a session on
the first lookup, and a new one after the session or its connection fails. With SshSharp.Extensions.DependencyInjection, the
shared connection's OpenSftpAsync is that factory:
var connections = app.Services.GetRequiredService<ISshConnectionProvider>();
var provider = new SftpFileProvider(ct => connections.OpenSftpAsync("assets", ct), "/srv/www"); // owns its sessions
app.UseStaticFiles(new StaticFileOptions { FileProvider = provider });
app.Lifetime.ApplicationStopped.Register(provider.Dispose);
Read-only. IFileProvider is synchronous, so each lookup waits for the server (bounded by
SftpFileProviderOptions.OperationTimeout); attributes and listings are cached briefly (CacheDuration), in a cache of at most
MaxCacheEntries paths, so requests for paths that do not exist cannot grow it without limit. Paths cannot leave the root.
Documentation: https://zcsizmadia.github.io/SshSharp/
| 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.FileProviders.Abstractions (>= 10.0.12)
- SshSharp (>= 1.1.0)
-
net8.0
- Microsoft.Extensions.FileProviders.Abstractions (>= 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.