RemoteCommandKit 0.1.0
dotnet add package RemoteCommandKit --version 0.1.0
NuGet\Install-Package RemoteCommandKit -Version 0.1.0
<PackageReference Include="RemoteCommandKit" Version="0.1.0" />
<PackageVersion Include="RemoteCommandKit" Version="0.1.0" />
<PackageReference Include="RemoteCommandKit" />
paket add RemoteCommandKit --version 0.1.0
#r "nuget: RemoteCommandKit, 0.1.0"
#:package RemoteCommandKit@0.1.0
#addin nuget:?package=RemoteCommandKit&version=0.1.0
#tool nuget:?package=RemoteCommandKit&version=0.1.0
RemoteCommandKit
RemoteCommandKit is a typed remote-command and cluster-orchestration library for .NET. The package targets .NET Standard 2.0 and uses the managed SSH.NET client; consumers do not need an ssh executable.
The main boundaries are deliberately small:
IRemoteCommand<TResponse>creates a structured process specification and parses a typed response.IRemoteTransportexecutes that specification and returns raw stdout, stderr, exit status, and duration.ComputeNodecombines node identity with an injected transport.ClusterOrchestratorprovides capability filtering, bounded concurrency, deadlines, and per-node outcomes.
Included Linux commands cover health, ping, system information, memory information, and disk usage. RemoteCommandRegistry provides optional allow-listed discovery; the library does not expose an unrestricted shell command API.
Compatibility
The library targets netstandard2.0. Tests target .NET 8.0. SSH support uses SSH.NET 2026.0.0, which also supplies a .NET Standard 2.0 asset.
SSH setup
Authentication and host trust must both be configured explicitly:
using RemoteCommandKit.Commands;
using RemoteCommandKit.Core;
using RemoteCommandKit.Infrastructure;
using RemoteCommandKit.Orchestration;
var options = new SshConnectionOptions(
host: "node-01.example.net",
username: "cluster",
credentials: new[]
{
SshCredential.PrivateKey(
"~/.ssh/id_ed25519",
passphraseProvider: () => secretStore.Get("ssh-key-passphrase"))
},
hostKeyVerifier: new PinnedHostKeyVerifier(
"SHA256:replace-with-a-separately-verified-host-key-fingerprint"));
using var node = new ComputeNode(
"node-01",
"Node 01",
options.Host,
RemotePlatform.Linux,
new SshNetRemoteTransport(options),
capabilities: new[] { NodeCapabilities.RemoteExecution, NodeCapabilities.LinuxProcfs });
var memory = await node.RunAsync(new MemoryInformationCommand(), cancellationToken);
SshCredential.Password is also available and accepts a callback so the password can be retrieved when a connection is created. Do not hard-code credentials or host-key fingerprints. Verify fingerprints through a trusted channel before pinning them.
SshNetRemoteTransport reuses its connection and serializes commands per transport. Create one transport per compute node when commands may run concurrently across a cluster.
Cluster execution
using var cluster = new ComputeCluster(nodes);
var orchestrator = new ClusterOrchestrator(cluster);
var result = await orchestrator.ExecuteAsync(
_ => new DiskUsageCommand("/"),
new ClusterExecutionOptions(maxConcurrency: 8),
requiredCapabilities: new[] { NodeCapabilities.DiskUsage },
cancellationToken: cancellationToken);
foreach (var outcome in result.Outcomes)
{
// Inspect outcome.Response or outcome.Failure without losing partial results.
}
Caller cancellation propagates. Command and cluster deadlines are retained as typed per-node timeout outcomes when orchestrating.
Build and package
dotnet test RemoteCommandKit.sln
dotnet pack src/RemoteCommandKit/RemoteCommandKit.csproj -c Release
The SSH integration test is inert unless these variables are configured:
REMOTE_COMMAND_KIT_SSH_HOSTREMOTE_COMMAND_KIT_SSH_USERNAMEREMOTE_COMMAND_KIT_SSH_KEY_PATHREMOTE_COMMAND_KIT_SSH_FINGERPRINT
Publishing
CI runs from .github/workflows/ci.yml for pushes and pull requests. Publishing runs when a GitHub release is published and uses its tag (for example, v1.2.0) as the package version.
Configure the nuget.org trusted-publishing policy with:
- Repository owner:
CarbonNeuron - Repository:
RemoteCommandKit - Workflow file:
publish-nuget.yml - Environment: leave empty
Set the GitHub repository variable NUGET_USER to the nuget.org profile name. No long-lived NuGet API key is needed; NuGet/login@v1 exchanges GitHub's OIDC token for a temporary key immediately before publishing.
| 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 was computed. 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
- SSH.NET (>= 2026.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.0 | 111 | 8/21/2026 |