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 |
✅ | |
| 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.LibSshOr 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 runThe 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.