sshocked – Shelling into servers and containers with lightning speed.
A .NET console application that provides a fast, interactive terminal UI for managing and connecting to SSH servers and containers. Organize hosts into groups, import from your OpenSSH config, and launch SSH sessions — all from a single, keyboard-driven interface.
- Server Management — Add, edit, and delete SSH hosts with aliases, addresses, ports, and authentication methods
- Group Organization — Group servers by project, environment, or any category; connect to all servers in a group at once
- SSH Config Import — Parse your existing
~/.ssh/configand import hosts automatically - Multiple Auth Methods — SSH key (with optional identity file), password, SSH agent, or custom SSH options
- Interactive TUI — Keyboard-driven terminal UI with sub-menu navigation and a server overview table
- Native AOT — Published as a native binary for fast startup and zero runtime dependencies
| Component | Technology |
|---|---|
| Runtime | .NET 10 |
| UI Framework | Spectre.Console |
| DI | Microsoft.Extensions.DependencyInjection |
| Logging | Microsoft.Extensions.Logging (file-based, no console output) |
| Serialization | System.Text.Json (source-generated) |
| Publishing | Native AOT (PublishAot) |
- .NET 10 SDK (for development/building from source)
- OpenSSH Client (for SSH connections)
Linux & macOS:
curl -fsSL https://github.com/ms-sk/sshocked/releases/latest/download/install.sh | sudo shWindows (PowerShell as Administrator):
irm https://github.com/ms-sk/sshocked/releases/latest/download/install.ps1 | iexThis automatically detects your OS and architecture, downloads the correct binary, and installs it to /usr/local/bin/ssk (Linux/macOS) or %ProgramFiles%\sshocked\ssk.exe (Windows, added to PATH).
Download the .deb for your architecture from the Releases page and install:
sudo apt install ./sshocked-linux-x64.deb
# or
sudo dpkg -i sshocked-linux-x64.deb- Download the latest archive for your platform from the Releases page
- Extract the binary and add it to your
PATH
# Clone the repository
git clone https://github.com/ms-sk/sshocked.git
cd sshocked
# Restore dependencies
dotnet restore
# Build
dotnet build --configuration Release
# Run
dotnet run --project src/Sshocked/Sshocked.csprojdotnet publish src/Sshocked/Sshocked.csproj \
-c Release \
-r <RID> \
--self-contained true \
-o ./publishReplace <RID> with your platform runtime identifier (e.g., linux-x64, win-x64, osx-x64, linux-arm64).
Launch the application:
sshocked
# or the shorter alias:
ssksshocked (or ssk) supports command-line arguments for direct SSH connections and non-interactive usage:
| Command | Description |
|---|---|
ssk |
Launch the interactive TUI menu |
ssk <alias> |
Connect directly to a server by alias |
ssk <hostname> |
Connect directly to a server by hostname |
ssk <group> |
Connect to all servers in a group |
ssk --list, -l |
List all configured servers and groups (pipe-friendly) |
ssk --help, -h |
Show usage guide |
ssk --version, -v |
Show version information |
Examples:
# Direct connection to a server
ssk prod-db-01
# Connect to all servers in a group
ssk production
# Non-interactive listing (great for scripting)
ssk --list | grep prodWhen launched without arguments, the main menu displays a table of all configured servers grouped by category. Navigate using the keyboard:
- Arrow keys — Move selection
- Enter — Select a server or action
[C] Connect- Connect to a server / docker container[G] Connect Group- Connect to a server / docker[X] Run command- Run command on the groups[S] Servers- CRUD Servers[R] Groups- CRUD Groups[B] Back— Return to the previous menu[E] Exit— Exit the application
| Action | Description |
|---|---|
| Connect | Launch an interactive SSH session to the selected server |
| Add Server | Add a new SSH host (alias, host, port, user, auth method) |
| Edit Server | Modify an existing server's configuration |
| Delete Server | Remove a server from the configuration |
| Create Group | Create a new server group |
| Import SSH Config | Parse ~/.ssh/config and import matching hosts |
See SKILLS.md for the full command reference and details on adding new commands.
Configuration is stored in a local JSON file:
| Platform | Path |
|---|---|
| Windows | %APPDATA%\sshocked\appconfig.json |
| Linux/macOS | ~/.config/sshocked/appconfig.json |
The file is auto-created on first run. Logs are written to logs/sshocked.log in the same directory (rotated at 5 MB, up to 3 backups).
Sshocked.slnx -- Solution file (.slnx format)
src/Sshocked/
├── Program.cs -- Entry point with DI bootstrapping
├── Sshocked.csproj -- Project file (net10.0, AOT-ready)
├── Models/ -- Domain models (AppConfig, ServerHost, ServerGroup)
├── Interfaces/ -- Core interfaces (IConfigRepository, ISshConfigImporter, IAppRunner, ...)
└── Services/ -- Implementations (JsonConfigRepository, AppRunner, ...)
This project is licensed under the GNU General Public License v3.0 — see the LICENSE file for details.
This project uses the following third-party libraries. See the NOTICE file for full attribution and license details.
| Dependency | License |
|---|---|
| Spectre.Console | MIT |
| SixLabors.ImageSharp | Apache 2.0 / Six Labors Split License |
| Microsoft.Extensions.* | MIT |