A modern, cross-platform .NET library providing managed bindings for libssh2, enabling SSH operations including remote command execution, SCP file transfers, and advanced terminal (PTY) features.

| Category |
Feature |
Method(s) |
Supported |
| Authentication |
|
|
|
|
Password authentication |
Authenticate(PasswordCredential) |
✅ |
|
Public key authentication |
Authenticate(PublicKeyCredential) |
✅ |
|
SSH agent authentication |
Authenticate(SshAgentCredential) |
✅ |
|
Host-based authentication |
Authenticate(HostBasedCredential) |
✅ |
|
Keyboard-interactive authentication |
- |
❌ |
| Session Management |
|
|
|
|
Connection |
Connect, ConnectAsync |
✅ |
|
Host key retrieval |
GetHostKey |
✅ |
|
Host key verification |
GetHostKeyHash |
✅ |
|
Session timeout configuration |
SetSessionTimeout, DisableSessionTimeout |
✅ |
|
Keepalive configuration |
ConfigureKeepAlive, SendKeepAlive |
✅ |
|
Method preference configuration |
SetMethodPreferences |
✅ |
|
Secure default algorithms |
SetSecureMethodPreferences |
✅ |
|
Negotiated method inspection |
GetNegotiatedMethod |
✅ |
| File Transfer (SCP) |
|
|
|
|
File upload |
WriteFile, WriteFileAsync |
✅ |
|
File download |
ReadFile, ReadFileAsync |
✅ |
| Command Execution |
|
|
|
|
One-shot command execution |
ExecuteCommand, ExecuteCommandAsync |
✅ |
|
Streaming command execution |
ExecuteCommandStreaming, ExecuteCommandStreamingAsync |
✅ |
|
Exit code retrieval |
SshCommandResult.ExitCode |
✅ |
|
Exit signal retrieval |
SshCommandResult.ExitSignal |
✅ |
|
stdout/stderr separation |
SshCommandResult.Stdout, SshCommandResult.Stderr |
✅ |
| Terminal (PTY) |
|
|
|
|
PTY allocation |
CommandExecutionOptions.RequestPty |
✅ |
|
Terminal type selection |
CommandExecutionOptions.TerminalType |
✅ |
|
Terminal modes |
CommandExecutionOptions.TerminalModes |
✅ |
|
Window size configuration |
CommandExecutionOptions.TerminalWidth/Height |
✅ |
|
Interactive shell mode |
- |
❌ |
| Error Handling |
|
|
|
|
Typed exceptions |
SshException |
✅ |
|
Detailed error messages |
SshException.Message |
✅ |
|
60+ error code mappings |
SshError enum |
✅ |
| Advanced Features |
|
|
|
|
Host key type detection |
SshHostKey.Type |
✅ |
|
Microsoft.Extensions.Logging integration |
Constructor ILogger parameter |
✅ |
|
Cross-platform native binaries |
Bundled in NuGet package |
✅ |
|
Global library cleanup |
LibSsh2.Exit() |
✅ |
| Thread Safety |
|
|
|
|
SshSession is NOT thread-safe. |
- |
❌ |
|
Multiple SshSessions are supported. |
- |
✅ |
Install via NuGet Package Manager:
dotnet add package NullOpsDevs.LibSsh
Or via Package Manager Console:
Install-Package NullOpsDevs.LibSsh
- .NET 9.0+
- Windows (x64)
- Linux (x64, ARM64)
- macOS (x64, ARM64/Apple Silicon)
Quickstart guide is available here.
- .NET 9.0 SDK or later
- Git
# Clone the repository
git clone https://github.com/NullOpsDevs/LibSshNet.git
cd LibSshNet
# Restore dependencies and build
dotnet restore
dotnet build
# Run tests
cd NullOpsDevs.LibSsh.Test
docker compose up -d
dotnet run
The library consists of three layers:
- Managed Layer: Clean, idiomatic C# API with async/await support (not true async)
- Interop Layer: P/Invoke bindings to libssh2 native library
- Native Layer: Pre-compiled libssh2 binaries for all supported platforms
All native dependencies are bundled in the NuGet package for zero-configuration deployment.
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.
This library uses libssh2, a client-side C library implementing the SSH2 protocol.
libssh2 is licensed under BSD License.